Python selenium
生成測(cè)試報(bào)告(HTMLTestRunner)
下載HTMLTestRunner.py文件捧弃,通過(guò)此文件生成測(cè)試報(bào)告
將文件放到...\Python27\Lib目錄下(windows)
-
可以通過(guò)dir(HTMLTestRunner)查看包含哪些方法
>>> import HTMLTestRunner >>> dir(HTMLTestRunner) ['HTMLTestRunner', 'OutputRedirector', 'StringIO', 'Template_mixin', 'TestProgram', 'TestResult', '_TestResult', '__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', 'datetime', 'main', 'saxutils', 'stderr_redirector', 'stdout_redirector', 'sys', 'time', 'unittest']
-
下面可以在用例中添加可以生成報(bào)告的代碼
#coding:utf-8 from selenium import webdriver from selenium.webdriver.support.ui import Select import unittest, time import HTMLTestRunner class Baidu(unittest.TestCase): def setUp(self): # 用于設(shè)置初始化的部分 self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) # 隱性等待赠叼,最長(zhǎng)等30秒 self.base_url = "http://www.baidu.com" self.verificationErrors = [] # 腳本運(yùn)行時(shí),錯(cuò)誤的信息將被打印到這個(gè)列表中违霞。 self.accept_next_alert = True # 是否繼續(xù)接受下一個(gè)警告 def test_baidu_serach(self): driver = self.driver driver.get(self.base_url + "/") driver.find_element_by_id("kw").send_keys("Selenium webdriver") driver.find_element_by_id("su").click() time.sleep(2) driver.close() def test_baidu_set(self): driver = self.driver driver.get(self.base_url + "/gaoji/preferences.html") # 進(jìn)入搜索設(shè)置頁(yè) Select(driver.find_element_by_id("nr")).select_by_visible_text(u"每頁(yè)顯示10條") time.sleep(2) driver.find_element_by_id("save").click() time.sleep(2) # driver.switch_to_alert().accept() # 此方法即將棄用嘴办。 driver.switch_to.alert.accept() time.sleep(2) # 保存百度的設(shè)置時(shí)會(huì)會(huì)彈出一個(gè)確定按鈕;我們并沒(méi)按照常規(guī)的方法去定位彈窗上的“確定”按鈕买鸽,而是使用switch_to.alert.accept() def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == "__main__": testunit = unittest.TestSuite() # 定義一個(gè)單元測(cè)試容器 testunit.addTest(Baidu("test_baidu_serach")) # 將測(cè)試用例加入到測(cè)試容器中 testunit.addTest(Baidu("test_baidu_set")) filename = 'D:\\result.html' # 定義個(gè)報(bào)告存放路徑涧郊,支持相對(duì)路徑。 fp = file(filename, 'wb') runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title='Report_title', description='Report_description') runner.run(testunit) # 自動(dòng)進(jìn)行測(cè)試 注意眼五,運(yùn)行的時(shí)候妆艘,需要使用python run,不能以u(píng)nittest運(yùn)行看幼,否則不能生成測(cè)試報(bào)告批旺。 原因是 pycharm的Run unittest會(huì)直接運(yùn)行用例,不走下面的man函數(shù)诵姜。
補(bǔ)充
-
-
強(qiáng)制等待:簡(jiǎn)單粗暴汽煮, 這種叫強(qiáng)制等待,不管你瀏覽器是否加載完了棚唆,程序都得等待xx秒,xx秒一到暇赤,繼續(xù)執(zhí)行下面的代碼.
作為調(diào)試很有用,有時(shí)候也可以在代碼里這樣等待宵凌,不過(guò)不建議總用這種等待方式鞋囊,太死板,嚴(yán)重影響程序執(zhí)行速度瞎惫。sleep(3) # 強(qiáng)制等待3秒再執(zhí)行下一步
-
隱形等待: 隱形等待是設(shè)置了一個(gè)最長(zhǎng)等待時(shí)間失暴,如果在規(guī)定時(shí)間內(nèi)網(wǎng)頁(yè)加載完成坯门,則執(zhí)行下一步,否則一直等到時(shí)間截止逗扒,然后執(zhí)行下一 步。 隱性等待對(duì)整個(gè)driver的周期都起作用欠橘,所以只要設(shè)置一次即可
driver.implicitly_wait(30) # 隱性等待矩肩,最長(zhǎng)等30秒
-
顯性等待:WebDriverWait,配合該類(lèi)的until()和until_not()方法肃续,就能夠根據(jù)判斷條件而進(jìn)行靈活地等待了黍檩。它主要的意思就是:程 序每隔xx秒看一眼,如果條件成立了始锚,則執(zhí)行下一步刽酱,否則繼續(xù)等待,直到超過(guò)設(shè)置的最長(zhǎng)時(shí)間瞧捌,然后拋出TimeoutException棵里。
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
-