帶unittest的腳本分析python
#test.py
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest,time,re
class BaiduTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url="http://www.baidu.com"
self.verificationErrors=[]
self.accept_next_alert=True
def test_baidu(self):
driver=self.driver
driver.get(self.base_url +"/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium ide")
driver.find_element_by_id("su").click()
def is_element_present(self,how,what):
try:
self.driver.find_element(by=how,vaule=what)
except NoSuchElementException,e:
return False
return True
def is_alert_present(self):
try:
self.driver.switch_to_alert()
except NoAlertPresentException,e:
return False
return True
def close_alert_and_get_its_text(self):
try:
alert=self.driver.switch_to_alert()
alert_text=alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally:
self.accept_next_alert=True
def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors)
if __name__=="__main__":
unittest.main()
代碼分析以下:
Import unittest #首先引入unittest框架
Class BaiduTest(unittest.TestCase): BaiduTest類繼承unitt框架的TestCase類成爲標磚的測試類。web
def setUp(self): self.driver=webdriver.Chrome() self.driver.implicitly_wait(30) self.base_url="http://www.baidu.com" self.verificationErrors=[] self.accept_next_alert=True
1.-setUp用於設置初始化工做,在執行每個測試用例前先被執行,它與tearDown方法相呼應,後者在每個測試用例執行後被執行。這裏的初始化工做定義了瀏覽器啓動和基礎URL地址。
2.implicitly_wait()設置頁面上元素的隱性等待時間爲30秒。
3.定義空的verificationErrors數組,腳本運行時的錯誤信息將被記錄到這個數組中。
4.定義accept_next_alert變量,表示是否繼續接受下一個警告,初始狀態爲True。數組
def test_baidu(self): driver=self.driver driver.get(self.base_url +"/") driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("selenium ide") driver.find_element_by_id("su").click()
這裏就是測試腳本瀏覽器
def is_element_present(self,how,what): try: self.driver.find_element(by=how,vaule=what) except NoSuchElementException,e: return False return True
is_element_present方法用於查找頁面元素是否存在,經過find_element()來接收元素的定位方法(how)和定位值(what),若是定位到元素則返回True,不然拋出異常並返回False。Try…except….爲python語言的異常處理。框架
def is_alert_present(self): try: self.driver.switch_to_alert() except NoAlertPresentException,e: return False return True
is_alert_present()方法用於判斷當前頁面是否存在警告框,利用webDriver提供的switch_to_alert()方法來捕捉頁面上警告框。若是捕捉到警告框則返回True,不然將拋出NoAlertPresentException類型異常,並返回False。
通過驗證,無論頁面是否出現警告框,返回結果都是True,全部能夠調整該方法爲driver.switch_to_alert().text,用於獲取當前頁面上的警告提示信息,能夠獲取到就返回True,獲取不到則返回False。ide
def close_alert_and_get_its_text(self): try: alert=self.driver.switch_to_alert() alert_text=alert.text if self.accept_next_alert: alert.accept() else: alert.dismiss() return alert_text finally: self.accept_next_alert=True
close_alert_and_get_its_text()關閉警告並得到警告信息,首先經過switch_to_alert()得到警告,經過text得到警告框信息。接着經過if語句判斷accept_next_alert的狀態,在setUp()中已經初始狀態爲True,若是爲True,則經過accept()接受警告,不然dissmiss()忽略此警告。測試
def tearDown(self): self.driver.quit() self.assertEqual([],self.verificationErrors)
tearDown()方法在每一個測試方法執行後調用,這個方法用於測試用例執行後的清理工做,如退出瀏覽器、關閉驅動、恢復用例執行狀態等。ui
在setUp()方法中定義的verificationErrors爲空數組,這裏經過assertEqual()比較其是否爲空,若是爲空則說明用例執行的過程當中沒有出現異常,不然將拋出AssertionError異常。url
if __name__=="__main__": unittest.main()
經過unittest.main()方法來運行當前文件中的測試方法,其默認匹配並運行以test開頭的方法。spa