webdriver中的等待——主要講解WebDriverWait()


webdriver中的等待——主要講解WebDriverWait()

 

強制等待:sleep()

import time
sleep(5)  #等待5秒

設置固定休眠時間,單位為秒。 由python的time包提供, 導入 time 包后就可以使用。
缺點:不智能,使用太多的sleep會影響腳本運行速度。


隱式等待:implicitly_wait()

driver.implicitly_wait(10) #隱式等待10秒

由webdriver提供的方法,一旦設置,這個隱式等待會在WebDriver對象實例的整個生命周期起作用,它不針對某一個元素,是全局元素等待,即在定位元素時,需要等待頁面全部元素加載完成,才會執行下一個語句。如果超出了設置時間的則拋出異常。

缺點:當頁面某些js無法加載,但是想找的元素已經出來了,它還是會繼續等待,直到頁面加載完成(瀏覽器標簽左上角圈圈不再轉),才會執行下一句。某些情況下會影響腳本執行速度。


顯示等待:WebDriverWait()

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

需要通過from selenium.webdriver.support.wait import WebDriverWait導入模塊

  • driver:瀏覽器驅動
  • timeout:最長超時時間,默認以秒為單位
  • poll_frequency:檢測的間隔步長,默認為0.5s
  • ignored_exceptions:超時后的拋出的異常信息,默認拋出NoSuchElementExeception異常。

與until()或者until_not()方法結合使用

WebDriverWait(driver,10).until(method,message="")
調用該方法提供的驅動程序作為參數,直到返回值為True
WebDriverWait(driver,10).until_not(method,message="")
調用該方法提供的驅動程序作為參數,直到返回值為False

 

在設置時間(10s)內,等待后面的條件發生。如果超過設置時間未發生,則拋出異常。在等待期間,每隔一定時間(默認0.5秒),調用until或until_not里的方法,直到它返回True或False.

WebDriverWait與expected_conditions結合使用

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver,10,0.5)
element =waite.until(EC.presence_of_element_located((By.ID,"kw"),message="")
# 此處注意,如果省略message=“”,則By.ID外面是兩層()

 

expected_conditions類提供的預期條件判斷的方法

方法 說明
title_is 判斷當前頁面的 title 是否完全等於(==)預期字符串,返回布爾值
title_contains 判斷當前頁面的 title 是否包含預期字符串,返回布爾值
presence_of_element_located 判斷某個元素是否被加到了 dom 樹里,並不代表該元素一定可見
visibility_of_element_located 判斷元素是否可見(可見代表元素非隱藏,並且元素寬和高都不等於 0)
visibility_of 同上一方法,只是上一方法參數為locator,這個方法參數是 定位后的元素
presence_of_all_elements_located 判斷是否至少有 1 個元素存在於 dom 樹中。舉例:如果頁面上有 n 個元素的 class 都是’wp’,那么只要有 1 個元素存在,這個方法就返回 True
text_to_be_present_in_element 判斷某個元素中的 text 是否 包含 了預期的字符串
text_to_be_present_in_element_value 判斷某個元素中的 value 屬性是否包含 了預期的字符串
frame_to_be_available_and_switch_to_it 判斷該 frame 是否可以 switch進去,如果可以的話,返回 True 並且 switch 進去,否則返回 False
invisibility_of_element_located 判斷某個元素中是否不存在於dom樹或不可見
element_to_be_clickable 判斷某個元素中是否可見並且可點擊
staleness_of 等某個元素從 dom 樹中移除,注意,這個方法也是返回 True或 False
element_to_be_selected 判斷某個元素是否被選中了,一般用在下拉列表
element_selection_state_to_be 判斷某個元素的選中狀態是否符合預期
element_located_selection_state_to_be 跟上面的方法作用一樣,只是上面的方法傳入定位到的 element,而這個方法傳入 locator
alert_is_present 判斷頁面上是否存在 alert

顯示等待,自定義等待條件

#設置等待
wait = WebDriverWait(driver,10,0.5)
#使用匿名函數
wait.until(lambda diver:driver.find_element_by_id('kw'))

 

lambda的使用可另行參考python相關教程


免責聲明!

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



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