WebDriverWait顯示等待詳細方法


#__author__=Admin
#Created time:2021/9/17 18:05
from unittest import mock
'''
顯示等待:WebDriverWait()
1、導包
from selenium.webdriver.support.wait import WebDriverWait

eg:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:瀏覽器驅動
timeout:最長超時時間,默認以秒為單位
poll_frequency:檢測的時隔步長(在2中表示調用until或until_not中方法的間隔時間),默認是0.5s
ignored_exceptions:超時后的拋出的異常信息,默認拋出NoSuchException信息。

2、與until()或者until_not()方法結合使用
WebDriverWait(driver,10).until(methond,message="")
    調用該方法提供的驅動程序作為參數,直到返回為True
WebDriverWait(driver,10).until_not(methond,message="")
    調用該方法提供的驅動程序作為參數,直到返回為False
在設置時間10s內,等待后面的條件發生。如果超時設置時間未發生,則拋出異常。
method:在等待時間,每隔一段時間(__init__中的poll_frequency)調用until或until_not里的方法,知道它返回True或False。
調用message: 如果超時,拋出TimeoutException,將message傳入異常

3、WebDriverWait與excepted_conditions結合使用
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

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

driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
wait = WebDriverWait(driver,10,0.5)
element =wait.until(EC.presence_of_element_located((By.ID,"kw")),message="")
'''
presence_of_element_located類中__init__()方法取的確實是2個參數(self, locator),其中locator調用的是一個tuple(元組)
該元組(By.ID,“su”)作為一個整體,對應相當於1個參數,加上類實例化代表自身的self參數,正好就是2個參數
因此,執行代碼正確的寫法為:presence_of_element_located((By.ID,“su”)),即需要嵌套兩層英文圓括號
'''
# 此處注意,如果省略message=“”,則By.ID外面是三層()

# WebDriverWait(driver, 10).until(driver.find_element_by_id('kw'))
# 錯誤用法:TypeError: 'xxx' object is not callable

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

驗證title,驗證傳入的參數title是否等於或包含於driver.title
title_is   判斷當前頁面的 title 是否完全等於(==)預期字符串,返回布爾值
title_contains   判斷當前頁面的 title 是否包含預期字符串,返回布爾值

 

驗證元素是否出現,傳入的參數都是元組類型的locator,如(By.ID, ‘kw’)
presence_of_element_located   判斷某個元素是否被加到了 dom 樹里,並不代表該元素一定可見

presence_of_all_elements_located 判斷是否至少有 1 個元素存在於 dom 樹中。舉例:如果頁面上有 n 個元素的 class 都是’wp’,那么只要有 1 個元素存在,這個方法就返回 True

 

驗證元素是否可見,前兩個傳入參數是元組類型的locator,第三個傳入WebElement,第一個和第三個其實質是一樣

visibility_of_element_located   判斷元素是否可見(可見代表元素非隱藏,並且元素寬和高都不等於 0)

invisibility_of_element_located   判斷某個元素中是否不存在於dom樹或不可見
visibility_of   同上一方法,只是上一方法參數為locator,這個方法參數是 定位后的元素

 

判斷某段文本是否出現在某元素中,一個判斷元素的text,一個判斷元素的value
text_to_be_present_in_element   判斷某個元素中的 text 是否 包含 了預期的字符串
text_to_be_present_in_element_value   判斷某個元素中的 value 屬性是否包含 了預期的字符串

 

判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it   判斷該 frame 是否可以 switch進去,如果可以的話,返回 True 並且 switch 進去,否則返回 False

 

以下條件判斷元素是否可點擊,傳入locator
element_to_be_clickable   判斷某個元素中是否可見並且可點擊

 

判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否刷新了
staleness_of 等某個元素從 dom 樹中移除,注意,這個方法也是返回 True或 False

 

判斷元素是否被選中,第一個條件傳入WebElement對象,第三個傳入locator元組,第二個傳入WebElement對象以及狀態,相等返回True,否則返回False,第四個傳入locator以及狀態,相等返回True,否則返回False
element_to_be_selected 判斷某個元素是否被選中了,一般用在下拉列表
element_selection_state_to_be 判斷某個元素的選中狀態是否符合預期
element_located_selection_state_to_be 跟上面的方法作用一樣,只是上面的方法傳入定位到的 element,而這個方法傳入 locator

 

判斷是否有alert出現
alert_is_present 判斷頁面上是否存在 alert

 

 
 轉自:https://www.cnblogs.com/LMZhaoyun/articles/15311411.html


免責聲明!

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



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