selenium (四) WebDriverWait 與 expected_conditions


在介紹WebDriverWait之前,先說一下,在selenium中的兩種等待頁面加載的方式,
第一種是隱式等待,在webdriver里面提供的implicitly_wait()方法,
driver.implicitly_wait(30) #單位:秒
第二種是顯示等待,是在support/wait中的WebDriverWait類中實現,可以根據需要
設置等待時間和每次等待的步長。
當前還有種等待方式,是Python自帶time模塊中的sleep()方法

這里就注重介紹 WebDriverWait 與 expected_conditions 結合來檢查元素是否存在。
先看 WebDriverWait 中給出示例:
from selenium.webdriver.support.ui import WebDriverWait
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))

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

因為WebDriverWait是一個帶參數構造類,調用時必須要傳遞參數(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
driver - (必選參數)是webDriver的實例
timeout - (必選參數)是設置等待超時時間,單位:秒;
poll_frequency - (非必選參數)是休眠時間,默認是0.5秒;
ignored_exceptions - (非必選參數)調用期間忽略異常類的可迭代結構

另外,在WebDriverWait下,還提供了兩個方法until()、until_not():
這兩個方法需要提供方法作為參數,所以可以結合expected_conditions中的方法或我們自己定義的方法/函數(帶返回值)作為參數。
until():調用驅動程序提供的方法作為參數,直到返回值不是False。
until_not():調用驅動程序提供的方法作為參數,直到返回值為False。

以上面的例子解釋執行的過程:
element = WebDriverWait(driver, 10,0.2).until(lambda x: x.find_element_by_id("someId"))

web_wait = WebDriverWait(driver,10,0.3) #實例化WebDriverWait類
element=web_wait.until(lambda element:element.find_element_by_id("kw")) #通過WebDriverWait類下的until()方法,調用lambda 函數,去獲取元素,獲取到則返回該元素。如果獲取不到返回false則每0.3秒后,再次調用。直到10秒超時后則報異常。
element.send_keys("selenium") #對元素進行操作


上面介紹了selenium的WebDriverWait時,說過until和until_not的參數是一個方法,而selenium下有一個模塊:expected_conditions模塊,
可以結合until、until_not一起使用,也可以到達一樣的效果。
title_is()類:檢查頁面的標題。title是預期的標題,必須是完全匹配,如果標題匹配則返回True,否則返回false。
print WebDriverWait(driver,5,0.5).until(title_is(u"百度一下,你就知道"))


title_contains()類:檢查頁面的標題。title是預期的標題,只要部分匹配則返回True,否則返回false
print WebDriverWait(driver,5,0.5).until(title_contains(u"百度一下"))


presence_of_element_located()類:期望檢查DOM上是否存在元素一頁 這並不一定意味着該元素是可見的,找到則返回該元素
link=WebDriverWait(driver,5,0.5).until(presence_of_element_located((By.ID,"kw")))
link.send_keys("selenium")


url_contains()類:期望檢查當前URL是否包含部分內容,則返回True,否則返回false
print WebDriverWait(driver,5,0.5).until(url_contains("baidu.com"))

 

url_to_be()類:期望檢查當前網址。url是否完全匹配的,如果url匹配則返回True,否則返回false。
WebDriverWait(driver,5,0.5).until(url_to_be("https://www.baidu.com/"))

 

visibility_of_element_located()類:期望檢查元素是否存在於DOM的DOM上頁面和可見。 可見性意味着不僅顯示元素
email=WebDriverWait(driver,5,0.5).until(visibility_of_element_located((By.ID,"kw")))
email.send_keys("123@qq.com")

 

visibility_of()類:期望檢查已知存在的元素頁面的DOM是可見的。
WebDriverWait(driver,5,0.5).until(visibility_of((By.ID,"email")))


presence_of_all_elements_located()類:期望檢查是否存在至少一個元素在網頁上。返回WebElements列表
visibility_of_any_elements_located()類:期望檢查至少有一個元素是可見的在網頁上。返回WebElements列表
visibility_of_all_elements_located()類:期望檢查所有元素是否存在於a的DOM上頁面和可見。用於查找元素一旦找到並可見,就會返回WebElements列表
text_to_be_present_in_element()類:期望檢查給定文本是否存在於指定的元素。
text_to_be_present_in_element_value()類:期望檢查元素中是否存在給定文本定位器,文本
invisibility_of_element_located()類:用於檢查元素是否不可見的期望出現在DOM上。
invisibility_of_element()類:檢查元素是否不可見的期望出現在DOM上。
element_to_be_clickable()類:檢查元素的期望是可見的並且已啟用你可以點擊它
staleness_of()類:等到元素不再附加到DOM。element是要等待的元素。如果元素仍附加到DOM,則返回False,否則返回true。
element_to_be_selected()類:選擇檢查選擇的期望。element是WebElement對象
element_located_to_be_selected()類:選擇對元素的期望。locator是(by,path)的元組
alert_is_present()類:檢查是否出現alter面板

 


免責聲明!

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



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