Pyunittest的內(nèi)容我們看的也差不多了还栓,主體功能大致如此对嚼,現(xiàn)在我們來(lái)看看selenium如何使用Pyunittest執(zhí)行自動(dòng)化測(cè)試敲霍。
本期目標(biāo)
- 打開百度肋乍,搜索“selenium”庐舟,關(guān)閉瀏覽器
- 打開百度,設(shè)置搜索的最大條數(shù)為20條(默認(rèn)是10條)住拭,關(guān)閉瀏覽器
編寫測(cè)試案例
先編寫我們的測(cè)試類,在初始化的時(shí)候要做一些處理历帚,代碼如下
class Baidu(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
Baidu類繼承unittest.TestCase滔岳。初始化中實(shí)例化webdriver.Chrome()。
self.driver.implicitly_wait(30) #表示等待一段時(shí)間挽牢。
self.base_url = "http://www.baidu.com" #定義我們測(cè)試的地址谱煤。
self.verificationErrors = [] #這行定義的是一個(gè)錯(cuò)誤接受的列表,暫時(shí)不用管禽拔。
self.accept_next_alert = True #這行表示接受彈出的alert窗口刘离。
第一個(gè)目標(biāo)
第一個(gè)目標(biāo)很簡(jiǎn)單,用ID定位輸入框和搜索按鈕睹栖,具體代碼如下
def test_baidu_search(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()
第二個(gè)目標(biāo)
第二個(gè)目標(biāo)有點(diǎn)麻煩硫惕,首先百度高級(jí)設(shè)置的地址是"http://www.baidu.com/gaoji/preferences.html",我們定義的基礎(chǔ)地址是“http://www.baidu.com”野来,要在后面把相關(guān)的字符串補(bǔ)齊恼除。之后我們要定位到搜索條數(shù)的地方,修改為20.修改完畢之后會(huì)彈出一個(gè)alert窗口曼氛,我們要干掉這個(gè)窗口后再關(guān)閉瀏覽器豁辉。具體代碼如下:
def test_baidu_set(self):
driver = self.driver
driver.get(self.base_url+"/gaoji/preferences.html")
m = driver.find_element_by_name("NR")
m.find_element_by_xpath("http://option[@value='20']").click()
time.sleep(2)
driver.find_element_by_xpath("http://input[@value='保存設(shè)置']").click()
time.sleep(2)
driver.switch_to_alert().accept()
同理,在這個(gè)測(cè)試案例中舀患,我們要先引用初始化的driver徽级。定位地址時(shí)用Python的字符串拼接方法。
m = driver.find_element_by_name("NR")
m.find_element_by_xpath("http://option[@value='20']").click()
這兩行表示定位到下拉選項(xiàng)為20的這個(gè)地方聊浅,第一行是定義到這個(gè)下拉組件中餐抢。
<select name="NR" id="nr">
<option value="10" selected="">每頁(yè)顯示10條</option>
<option value="20">每頁(yè)顯示20條</option>
<option value="50">每頁(yè)顯示50條</option>
</select>
上面是這個(gè)下拉組件的源碼现使,先定位到這個(gè)select組件,再使用xpath的方式定位到20條記錄這個(gè)下拉選項(xiàng)弹澎,調(diào)用點(diǎn)擊按鈕選中這條記錄朴下。谷歌瀏覽器的調(diào)試工具可以直接復(fù)制這條xpath地址(//*[@id="nr"]/option[2])也可以直接使用這個(gè)來(lái)定位。
driver.find_element_by_xpath("http://input[@value='保存設(shè)置']").click()
這條就是直接用xpath方法定位到保存按鈕苦蒿。
driver.switch_to_alert().accept()
這條命令就是接受彈出的alert對(duì)話框殴胧。
結(jié)束測(cè)試時(shí)清除的函數(shù)
每條測(cè)試案例開始時(shí)都會(huì)打開瀏覽器,然后執(zhí)行測(cè)試案例佩迟。執(zhí)行完畢后需要關(guān)閉瀏覽器团滥,關(guān)閉的方法我們寫在清除函數(shù)中,具體代碼如下:
def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors)
開始跑測(cè)試案例
最后我們需要吧測(cè)試案例跑起來(lái)报强,驗(yàn)證我們寫的對(duì)不對(duì)灸姊。在前面的章節(jié)已經(jīng)講過這里要這么跑了。具體代碼如下:
if __name__ == '__main__':
testunit = unittest.TestSuite()
testunit.addTest(Baidu('test_baidu_search'))
testunit.addTest(Baidu('test_baidu_set'))
runner.run(testunit)
完整的代碼
# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest,time,re
class Baidu(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_search(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")
driver.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
time.sleep(2)
driver.find_element_by_xpath("http://*[@id='save']").click()
time.sleep(2)
driver.switch_to_alert().accept()
def tearDown(self):
self.driver.quit()
self.assertEqual([],self.verificationErrors)
if __name__ == '__main__':
testunit = unittest.TestSuite()
testunit.addTest(Baidu('test_baidu_search'))
testunit.addTest(Baidu('test_baidu_set'))
runner.run(testunit)