WebDriverWait是selenium中的等待類,可以設定一個等待條件,幫助我們等待頁面載入完畢或某個元素出現以及消失。本文將從多個方面對其使用方法和實例進行詳細闡述。
一、等待條件
WebDriverWait的等待條件可以有多種,其中比較常用的有以下幾種:
- presence_of_element_located:元素是否在DOM中存在
- visibility_of_element_located:元素是否可見
- element_to_be_clickable:元素是否可以被點擊
- text_to_be_present_in_element:元素中是否包含文本
使用方法如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="content"]')))
二、等待時間和輪詢間隔
我們可以通過timeout參數設置最長等待時間,如果等待超時仍未出現等待條件,將拋出TimeoutException異常。同時,我們也可以通過poll_frequency參數設置輪詢間隔,以避免等待時間過長影響效率。
示例代碼:
from selenium.common.exceptions import TimeoutException try: element = WebDriverWait(driver, 10, 0.5).until(EC.visibility_of_element_located((By.CLASS_NAME, 'example-class'))) except TimeoutException: print("等待元素超時,該元素未能出現")
三、等待多個元素
有時我們需要等待多個元素出現或消失,可以使用ExpectedConditions類中的presence_of_all_elements_located和invisibility_of_all_elements等等方法。
示例代碼:
from selenium.webdriver.support.expected_conditions import presence_of_all_elements_located, invisibility_of_all_elements elements = WebDriverWait(driver, 10).until(presence_of_all_elements_located((By.XPATH, '//div[@class="example-class"]'))) is_not_visible = WebDriverWait(driver, 10).until(invisibility_of_all_elements((By.XPATH, '//div[@class="example-class"]')))
四、等待frame切換和alert出現
在WebDriverWait中,我們也可以等待frame切換和alert彈窗出現。
示例代碼:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) wait.until(EC.frame_to_be_available_and_switch_to_it('iframe_name')) alert = wait.until(EC.alert_is_present()) alert.accept()
五、等待自定義條件
在某些情況下,我們可能需要等待一些自定義的條件。我們可以通過編寫自定義類來實現,只要實現了__call__方法並返回True或False即可。
示例代碼:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class my_condition(object): def __init__(self): pass def __call__(self, driver): driver.find_element_by_id('example_id').click() return True wait = WebDriverWait(driver, 10) wait.until(my_condition())
通過以上5個方面的闡述,我們可以更好地理解和掌握WebDriverWait函數,並在selenium自動化測試中使用它來提高測試效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/196263.html