python自動(dòng)化測(cè)試selenium核心技術(shù)三種等待方式詳解
UI自動(dòng)化測(cè)試過(guò)程中,可能會(huì)出現(xiàn)因測(cè)試環(huán)境不穩(wěn)定、網(wǎng)絡(luò)慢等情況,如果不做任何處理的話,會(huì)出現(xiàn)無(wú)法定位到特定元素而報(bào)錯(cuò),導(dǎo)致自動(dòng)化測(cè)試無(wú)法順利執(zhí)行。
selenium官網(wǎng)手冊(cè):Waits | Selenium
slenium自動(dòng)化測(cè)試中,主要涉及三種等待方式:
1 使用python自帶模塊time的sleep方式
缺點(diǎn):即使網(wǎng)絡(luò)條件較好時(shí),依舊按照預(yù)定固定時(shí)間等待,一般不建議使用,腳本調(diào)試可使用。
示例腳本:
from selenium import webdriver from time import sleep class TestWait(object): driver = webdriver.Chrome() driver.get(http://www.baidu.com) def test_sleep(self): self.driver.find_element_by_id("kw").send_keys("sleep test") # sleep(2) #等待固定時(shí)間 self.driver.implicitly_wait(2) # 隱式等待 self.driver.find_element_by_id("su").click() self.driver.quit() if __name__ == '__main__': wait=TestWait() wait.test_sleep()
2 隱式等待(implicitly_wait)
隱式等待設(shè)置的時(shí)間是最長(zhǎng)的時(shí)間,如果在規(guī)定時(shí)間內(nèi)網(wǎng)頁(yè)加載完成,則執(zhí)行下一步,否則一直等到時(shí)間結(jié)束,然后執(zhí)行下一步。
注意:隱式等待對(duì)driver整個(gè)周期都起作用,一般在最開(kāi)始設(shè)置一次就可以了。不要當(dāng)做固定等待,哪里都設(shè)置隱式等待。
示例腳本:
from selenium import webdriver from time import sleep class TestWait(object): driver = webdriver.Chrome() driver.get(http://www.baidu.com) def test_sleep(self): self.driver.find_element_by_id("kw").send_keys("sleep test") self.driver.implicitly_wait(2) # 隱式等待 self.driver.find_element_by_id("su").click() self.driver.quit() if __name__ == '__main__': wait=TestWait() wait.test_sleep()
3 顯示等待(WebDriverWait)
顯式等待允許等待條件的發(fā)生,所以非常適合在瀏覽器及其DOM和WebDriver腳本之間同步狀態(tài)。
需要引入包:from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait參數(shù)說(shuō)明:
WebDriverWait(driver, timeout=3).until(some_condition)
兩種方法:until和util_not
場(chǎng)景:
打開(kāi)百度首頁(yè),等待頁(yè)面標(biāo)題出現(xiàn):百度一下,你就知道,再執(zhí)行輸入搜索關(guān)鍵詞,點(diǎn)擊“百度一下”按鈕。
示例腳本:
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec class TestWait(object): def setup(self): self.driver = webdriver.Chrome() self.driver.get(http://www.baidu.com) def test_webdreiverwait(self): webdreiverwaits =WebDriverWait(self.driver,2) webdreiverwaits.until(ec.title_is("百度一下,你就知道")) self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test") self.driver.find_element_by_id("su").click() def teardown(self): self.driver.quit() if __name__ == '__main__': wait=TestWait() wait.test_webdreiverwait()
三種等待完整示例腳本:
from selenium import webdriver from time import sleep from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec class TestWait(object): def setup(self): self.driver = webdriver.Chrome() self.driver.get("http://www.baidu.com") def test_sleep(self): self.driver.find_element_by_id("kw").send_keys("sleep test") sleep(2) #等待固定時(shí)間 self.driver.find_element_by_id("su").click() def test_implicitly(self): self.driver.find_element_by_id("kw").send_keys("implicitly test") self.driver.implicitly_wait(2) # 隱式等待 self.driver.find_element_by_id("su").click() def test_webdreiverwait(self): webdreiverwaits =WebDriverWait(self.driver,2) webdreiverwaits.until(ec.title_is("百度一下,你就知道")) self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test") self.driver.find_element_by_id("su").click() def teardown(self): self.driver.quit() if __name__ == '__main__': wait=TestWait() # wait.test_sleep() # wait.test_implicitly() wait.test_webdreiverwait()
【常見(jiàn)問(wèn)題】:運(yùn)行腳本報(bào)empty suite:
from selenium import webdriver from time import sleep class TestWait(object): def __init__(self): self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') def test_sleep(self): self.driver.find_element_by_id("kw").send_keys("sleep test") # sleep(2) #等待固定時(shí)間 self.driver.implicitly_wait(2) # 隱式等待 self.driver.find_element_by_id("su").click() self.driver.quit() if __name__ == '__main__': wait=TestWait() wait.test_sleep()
【解決方法】:腳本修改
from selenium import webdriver from time import sleep from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait class TestCase(object): def setup(self): self.driver = webdriver.Chrome() self.driver.get('http://www.baidu.com') # sleep(2) def test_sleep(self): self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 線程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) def test_implicitly(self): self.driver.implicitly_wait(10) self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 線程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) def test_wait(self): wait = WebDriverWait(self.driver,2) wait.until(EC.title_is('百度一下,你就知道')) self.driver.find_element_by_id('kw').send_keys('selenium') # sleep(2) # 線程阻塞 blocking wait self.driver.find_element_by_id('su').click() # sleep(3) def teardown(self): self.driver.quit() if __name__ == '__main__': case = TestCase() # case.test_sleep() # case.test_implicitly() case.test_wait()
以上:極客時(shí)間課程:selenium自動(dòng)化測(cè)試學(xué)習(xí)總結(jié)!
以上就是python自動(dòng)化測(cè)試selenium核心技術(shù)三種等待方式詳解的詳細(xì)內(nèi)容,更多關(guān)于selenium三種等待方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用PySimpleGUI設(shè)置進(jìn)度條及控件使用
PySimpleGUI是一個(gè)在tkinter基礎(chǔ)上的,足夠簡(jiǎn)單,方便,pythonic的GUI庫(kù).本文給大家介紹python使用PySimpleGUI設(shè)置進(jìn)度條的方法及進(jìn)度條控件使用代碼,感興趣的朋友跟隨小編一起看看吧2021-06-06Python3刪除排序數(shù)組中重復(fù)項(xiàng)的方法分析
這篇文章主要介紹了Python3刪除排序數(shù)組中重復(fù)項(xiàng)的方法,結(jié)合實(shí)例形式分析了Python3刪除排序數(shù)組重復(fù)項(xiàng)的原理、相關(guān)遍歷及刪除操作技巧,需要的朋友可以參考下2019-01-01python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape)
今天小編就為大家分享一篇python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例
這篇文章主要介紹了在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例,python操作excel主要用到xlrd和xlwt兩個(gè)庫(kù),即xlrd是讀excel,xlwt是寫excel庫(kù),文中提供了部分實(shí)例代碼,需要的朋友可以參考下2023-08-08python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意
這篇文章主要介紹了python np.arange 步長(zhǎng)0.1的問(wèn)題需要特別注意,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)
這篇文章主要介紹了python讀寫數(shù)據(jù)讀寫csv文件(pandas用法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Python圖像文字識(shí)別詳解(附實(shí)戰(zhàn)代碼)
這篇文章主要給大家介紹了關(guān)于Python圖像文字識(shí)別的相關(guān)資料,本文介紹使用python進(jìn)行圖像的文字識(shí)別,將圖像中的文字提取出來(lái),可以幫助我們完成很多有趣的事情,需要的朋友可以參考下2024-02-02