WebDriverWait显示等待中,until 方法常用的条件(expected_conditions)总结

WebDriverWait 是 Selenium 中常用的一个类,它允许我们设置在某个条件成立之前等待的最大时间。until 方法是该类的核心方法之一,它接受一个条件对象,直到该条件满足时,等待才会结束。until 方法的常见用法是等待某个元素的可见性、可点击性等条件。

WebDriverWait 的基本用法:

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

# 示例:等待某个元素的可见性
WebDriverWait(driver, 5, 0.5).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)

until 方法常用的条件(expected_conditions)

expected_conditions 模块提供了一些常用的等待条件。以下是一些常用的条件方法:

1. presence_of_element_located(locator)

等待某个元素出现在 DOM 中,不一定可见,但它必须存在。

WebDriverWait(driver, 5).until(
    EC.presence_of_element_located((By.ID, "element_id"))
)

2. visibility_of_element_located(locator)

等待某个元素可见,即元素必须在 DOM 中存在且可见。

WebDriverWait(driver, 5).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)

3. element_to_be_clickable(locator)

等待某个元素可点击,即元素存在且可见且启用。

WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.ID, "element_id"))
)

4. alert_is_present()

等待弹出警告框(alert)出现。

WebDriverWait(driver, 5).until(
    EC.alert_is_present()
)

5. frame_to_be_available_and_switch_to_it(locator)

等待一个 iframe 可用并切换到它。

WebDriverWait(driver, 5).until(
    EC.frame_to_be_available_and_switch_to_it((By.ID, "iframe_id"))
)

6. invisibility_of_element_located(locator)

等待某个元素消失,元素不可见且从 DOM 中移除。

WebDriverWait(driver, 5).until(
    EC.invisibility_of_element_located((By.ID, "element_id"))
)

7. staleness_of(element)

等待元素不再附属于 DOM 中。通常用于等待页面刷新或元素更新时,元素的 “staleness”。

WebDriverWait(driver, 5).until(
    EC.staleness_of(element)
)

8. text_to_be_present_in_element(locator, text)

等待某个元素包含指定的文本。

WebDriverWait(driver, 5).until(
    EC.text_to_be_present_in_element((By.ID, "element_id"), "Expected Text")
)

9. text_to_be_present_in_element_value(locator, text)

等待元素的 value 属性包含指定的文本。

WebDriverWait(driver, 5).until(
    EC.text_to_be_present_in_element_value((By.ID, "input_id"), "Expected Value")
)

10. visibility_of(element)

等待某个已经定位的元素可见。

WebDriverWait(driver, 5).until(
    EC.visibility_of(element)
)

11. number_of_elements_to_be_located(locator, num)

等待指定数量的元素出现在页面中。

WebDriverWait(driver, 5).until(
    EC.number_of_elements_to_be_located((By.CLASS_NAME, "class_name"), 3)
)

12. presence_of_all_elements_located(locator)

等待页面中所有符合条件的元素都已经加载并存在。

WebDriverWait(driver, 5).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, "class_name"))
)

13. new_window_is_opened(current_handles)

等待新的窗口被打开。

current_handles = driver.window_handles
WebDriverWait(driver, 5).until(
    EC.new_window_is_opened(current_handles)
)

综合使用 WebDriverWait

有时我们会结合多个条件进行等待。比如,等待元素可见且可点击:

WebDriverWait(driver, 5).until(
    EC.element_to_be_clickable((By.ID, "element_id"))
)

或等待多个元素出现:

WebDriverWait(driver, 5).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, "class_name"))
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值