WebDriverWait等設置等待時間和超時時間


1.顯示等待

等待頁面加載完成,找到某個條件發生后再繼續執行后續代碼,如果超過設置時間檢測不到則拋出異常

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

——driver:WebDriver 的驅動程序(Ie, Firefox, Chrome 或遠程)

——timeout:最長超時時間,默認以秒為單位

——poll_frequency:休眠時間的間隔(步長)時間,默認為 0.5 秒

——ignored_exceptions:超時后的異常信息,默認情況下拋 NoSuchElementException 異常

——如1:element = WebDriverWait(driver, 10).until(lambda x : x.find_element_by_id("id"))

           element.send_keys("selenium")

——如2:element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“Id”))

            is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())

WebDriverWai()一般由 unit()或 until_not()方法配合使用:

——until(method, message=’’)      調用該方法提供的驅動程序作為一個參數,直到返回值不為 False。——until_not(method, message=’’)      調用該方法提供的驅動程序作為一個參數,直到返回值為 False。


from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver=webdriver.Firefox()
driver.get()
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id("someId"))
#通過檢查某個元素是否被加載來檢查是否登錄成功,我認為當個黑盒子用就可以了。其中10的解釋:10秒內每隔0.5毫秒掃描1次頁面變化,直到指定的元素

2.隱示等待:implicitly_wait

# 相當於設置全局的等待,在定位元素時,對所有元素設置超時時間,超出了設置時間則拋出異常
# 隱式等待使得WebDriver在查找一個Element或者Element數組時,每隔一段特定的時間就會輪詢一次DOM,如果Element或數組沒有馬上被發現的話。
# 默認設置是0。
# 一旦設置,這個隱式等待會在WebDriver對象實例的整個生命周期起作用。
driver = webdriver.Firefox()
driver.implicitly_wait(10)


3.強制等待
import time
time.sleep(10)

 4.設置超時:

pageLoadTimeout方法用來設置頁面完全加載的超時時間,完全加載即頁面全部渲染,異步同步腳本都執行完成。前面的文章都是使用get 方法登錄安居客網站,大家應該能感覺到每次打開網頁后要等很長一段時間才會進行下一步的操作,那是因為沒有設置超時時間而get方法默認是等待頁面全部加 載完成才會進入下一步驟,加入將超時時間設置為3S就會中斷操作拋出異常

當頁面加載后就會執行下面的操作了

setScriptTimeout設置異步腳本的超時時間,用法同pageLoadTimeout一樣就不再寫了,異步腳本也就是有async屬性的JS腳本,可以在頁面解析的同時執行。

from selenium import webdriver  
d= webdriver.PhantomJS()  
d.set_page_load_timeout(10)  
d.set_script_timeout(10)#這兩種設置都進行才有效,未測試

參考:

selenium設置元素發現超時等待時間-python

selenium webdriver—超時設置

selenium 超時設置/等待時間過長自動停止(python)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM