您好,登錄后才能下訂單哦!
小編給大家分享一下python自動化測試selenium核心技術(shù)的等待方式有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
UI自動化測試過程中,可能會出現(xiàn)因測試環(huán)境不穩(wěn)定、網(wǎng)絡(luò)慢等情況,如果不做任何處理的話,會出現(xiàn)無法定位到特定元素而報錯,導(dǎo)致自動化測試無法順利執(zhí)行。
selenium官網(wǎng)手冊:Waits | Selenium
slenium自動化測試中,主要涉及三種等待方式:
缺點:即使網(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()
隱式等待設(shè)置的時間是最長的時間,如果在規(guī)定時間內(nèi)網(wǎng)頁加載完成,則執(zhí)行下一步,否則一直等到時間結(jié)束,然后執(zhí)行下一步。
注意:隱式等待對driver整個周期都起作用,一般在最開始設(shè)置一次就可以了。不要當做固定等待,哪里都設(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()
顯式等待允許等待條件的發(fā)生,所以非常適合在瀏覽器及其DOM和WebDriver腳本之間同步狀態(tài)。
需要引入包:from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait參數(shù)說明:
WebDriverWait(driver, timeout=3).until(some_condition)
兩種方法:until和util_not
場景:
打開百度首頁,等待頁面標題出現(xiàn):百度一下,你就知道,再執(zhí)行輸入搜索關(guā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()
【常見問題】:運行腳本報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()
看完了這篇文章,相信你對“python自動化測試selenium核心技術(shù)的等待方式有哪些”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。