python自動化測試selenium核心技術(shù)三種等待方式詳解
UI自動化測試過程中,可能會出現(xiàn)因測試環(huán)境不穩(wěn)定、網(wǎng)絡(luò)慢等情況,如果不做任何處理的話,會出現(xiàn)無法定位到特定元素而報錯,導(dǎo)致自動化測試無法順利執(zhí)行。
selenium官網(wǎng)手冊:Waits | Selenium
slenium自動化測試中,主要涉及三種等待方式:
1 使用python自帶模塊time的sleep方式
缺點(diǎn):即使網(wǎng)絡(luò)條件較好時,依舊按照預(yù)定固定時間等待,一般不建議使用,腳本調(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) #等待固定時間
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è)置的時間是最長的時間,如果在規(guī)定時間內(nèi)網(wǎng)頁加載完成,則執(zhí)行下一步,否則一直等到時間結(jié)束,然后執(zhí)行下一步。
注意:隱式等待對driver整個周期都起作用,一般在最開始設(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ù)說明:
WebDriverWait(driver, timeout=3).until(some_condition)

兩種方法:until和util_not

場景:
打開百度首頁,等待頁面標(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) #等待固定時間
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()
【常見問題】:運(yùn)行腳本報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) #等待固定時間
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()
以上:極客時間課程:selenium自動化測試學(xué)習(xí)總結(jié)!
以上就是python自動化測試selenium核心技術(shù)三種等待方式詳解的詳細(xì)內(nèi)容,更多關(guān)于selenium三種等待方式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用PySimpleGUI設(shè)置進(jìn)度條及控件使用
PySimpleGUI是一個在tkinter基礎(chǔ)上的,足夠簡單,方便,pythonic的GUI庫.本文給大家介紹python使用PySimpleGUI設(shè)置進(jìn)度條的方法及進(jìn)度條控件使用代碼,感興趣的朋友跟隨小編一起看看吧2021-06-06
Python3刪除排序數(shù)組中重復(fù)項的方法分析
這篇文章主要介紹了Python3刪除排序數(shù)組中重復(fù)項的方法,結(jié)合實(shí)例形式分析了Python3刪除排序數(shù)組重復(fù)項的原理、相關(guān)遍歷及刪除操作技巧,需要的朋友可以參考下2019-01-01
python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape)
今天小編就為大家分享一篇python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例
這篇文章主要介紹了在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例,python操作excel主要用到xlrd和xlwt兩個庫,即xlrd是讀excel,xlwt是寫excel庫,文中提供了部分實(shí)例代碼,需要的朋友可以參考下2023-08-08
python np.arange 步長0.1的問題需要特別注意
這篇文章主要介紹了python np.arange 步長0.1的問題需要特別注意,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
python讀寫數(shù)據(jù)讀寫csv文件(pandas用法)
這篇文章主要介紹了python讀寫數(shù)據(jù)讀寫csv文件(pandas用法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python圖像文字識別詳解(附實(shí)戰(zhàn)代碼)
這篇文章主要給大家介紹了關(guān)于Python圖像文字識別的相關(guān)資料,本文介紹使用python進(jìn)行圖像的文字識別,將圖像中的文字提取出來,可以幫助我們完成很多有趣的事情,需要的朋友可以參考下2024-02-02

