1. 程式人生 > >Selenium2+python自動化20-引入unittest框架

Selenium2+python自動化20-引入unittest框架

模塊 試用 and 瀏覽器 bsp false get urn 完成

Selenium2+python自動化20-引入unittest框架

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Baidu(unittest.TestCase):
def setUp(

self):
self.driver =webdriver.Firefox()
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").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
driver.close()
def is_element_present(self,how, what):
try:
self.driver.find_element(by=how, value=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()


啪啪啪上來就是一串代碼,是不是有點懵!,下面小編來解釋一下:
class Baidu(unittest.TestCase):
Baidu 類繼承 unittest.TestCase 類,從TestCase 類繼承是告訴 unittest 模塊的方式,這是一個測試案例。

def setUp(self):
self.driver = webdriver.Firefox()
self.base_url = "http://www.baidu.com/"
setUp 用於設置初始化的部分,在測試用例執行前,這個方法中的函數將先被調用。這裏將瀏覽器的調用和 URL 的訪問放到初始化部分。

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" ).send_keys( "seleniumwebdriver")
driver.find_element_by_id("su" ).click()
test_baidu 中放置的就是我們的測試腳本了,這部分我們並不陌生;因為我們執行的腳本就在這裏

def is_element_present(self, how, what):
try : self.driver.find_element(by=how, value= what)
except NoSuchElementException, e: return False
return True
is_element_present 函數用來查找頁面元素是否存在,try...except....為 python 語言的異常捕捉。
is_element_present 函數在這裏用處不大,通常刪除,因為判斷頁面元素是否存在一般都加在testcase 中。

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
關閉警告以及對得到文本框的處理,if 判斷語句前面已經多次使用,並不陌生;try....finally...為 python
的異常處理。

def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
tearDown 方法在每個測試方法執行後調用,這個地方做所有測試用例執行完成的清理工作,如退出
瀏覽器等。

self.assertEqual([], self.verificationErrors)
這個是難點,對前面 verificationErrors 方法獲得的列表進行比較;如查 verificationErrors 的列表
不為空,輸出列表中的報錯信息

if __name__ == "__main__":
unittest.main()
unitest.main()函數用來測試 類中以 test 開頭的測試用例

這樣一一分析下來,我們對unittest 框架有了初步的了解。運行腳本,因為引入了unittest 框架,

所以控制臺輸出了用例的執行個數、時間以及是否ok 等信息。

本篇只是初步對 unittest 的框架進行了分析, 還有許細節將放在後面章節進行討論, 例如python 的異常處理機制等。

Selenium2+python自動化20-引入unittest框架