這篇具有很好參考價值的文章主要介紹了python自動化測試selenium核心技術三種等待方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。
UI自動化測試過程中,可能會出現(xiàn)因測試環(huán)境不穩(wěn)定、網(wǎng)絡慢等情況,如果不做任何處理的話,會出現(xiàn)無法定位到特定元素而報錯,導致自動化測試無法順利執(zhí)行。
selenium官網(wǎng)手冊:Waits | Selenium
slenium自動化測試中,主要涉及三種等待方式:????
1 使用python自帶模塊time的sleep方式?????
缺點:即使網(wǎng)絡條件較好時,依舊按照預定固定時間等待,一般不建議使用,腳本調試可使用。
示例腳本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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)
隱式等待設置的時間是最長的時間,如果在規(guī)定時間內網(wǎng)頁加載完成,則執(zhí)行下一步,否則一直等到時間結束,然后執(zhí)行下一步。
注意:隱式等待對driver整個周期都起作用,一般在最開始設置一次就可以了。不要當做固定等待,哪里都設置隱式等待。
示例腳本:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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

場景:
打開百度首頁,等待頁面標題出現(xiàn):百度一下,你就知道,再執(zhí)行輸入搜索關鍵詞,點擊“百度一下”按鈕。
示例腳本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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() |
三種等待完整示例腳本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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() |
?
【解決方法】:腳本修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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() |
?現(xiàn)在我也找了很多測試的朋友,做了一個分享技術的交流群,共享了很多我們收集的技術文檔和視頻教程。
如果你不想再體驗自學時找不到資源,沒人解答問題,堅持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動化,性能,安全,測試開發(fā)等等方面有一定建樹的技術大牛
分享他們的經(jīng)驗,還會分享很多直播講座和技術沙龍
可以免費學習!劃重點!開源的?。?!
qq群號:485187702【暗號:csdn11】
最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?希望能幫助到你!【100%無套路免費領取】
文章來源:http://www.zghlxwxcb.cn/news/detail-847805.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-847805.html
到了這里,關于python自動化測試selenium核心技術三種等待方式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!