半月以上のテストを行い、seleniumの使用注意をまとめて実現しました

5196 ワード

1.なるべくsend_を使わないkey、jsを使用してinputに値を割り当てます.
send_keyが効かないことがある
2.execute_script取得値のスクリプトの書き方
'var ret=$("div.datagrid-body > table > tbody > tr >  
td:nth-child(2) > div").text();return ret;'
3.各caseはブラウザを終了せず、コードの書き方
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
cls.base_url = "http://10.10.12.18"
@classmethod

def tearDownClass(
cls):
cls.driver.close()
cls.driver.quit()
 
  
4.程序执行中,汇报错误:
 
   
self.assertFalse(ret1 or ret2),  htmlreport      failed,          raise
 
  
5.日志配置方法,既可以把日志打印到htmlreport上,又可以单独输出到日志文件:
 
   
 
   def init_log(report_dir): 
   
logger = logging.getLogger( 'mylogger')
logger.setLevel(logging.INFO)
fh = logging.FileHandler( '%s \\ test.log' % report_dir)
fh.setLevel(logging.INFO)
ch = logging.StreamHandler( stream=HTMLTestRunner.stdout_redirector)
ch.setLevel(logging.INFO)
formatter = logging.Formatter( '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(ch)
return logger
 
  
6. selenium 加载js文件
def load_jquery(self):
with open('jquery-1.11.3.js', 'r') as jquery_js: # read the jquery from a file
jquery = jquery_js.read()
self.driver.execute_script(jquery) # active the jquery lib

7.ページの様々なレイヤによってclickが認識できない場合があり、jsに取って代わることができる
8.すべてのtestを実行するとき、クラスの継承に注意する
ファイルbase.py:
class Base(unittest.TestCase):
    def test_xxx(self)
         print "test
"
ファイル
test_service.py:
from base import 
Base
class Service(Base)
     pass
discoverでは
ベースのtest_xxx
def create_suite():
    test_unit = unittest.TestSuite()
    # discover メソッド定義
    discover = unittest.defaultTestLoader.discover(
                        test_lists,
                        pattern='test*.py',
                        top_level_dir=None)
    # discoverメソッドは使用例をフィルタし、テストキットにループして追加します.
    for test_suite in discover:
        for test_case in test_suite:
            test_unit.addTests(test_case)
    return test_unit
正しいやり方の場合
import base
class Service(base.Base)