Skip to main content
 首页 » 编程设计

python之Selenium WebDriver 等待组合 ExpectedConditions(AND、OR、NOT 运算符)

2024年09月07日42lori

<分区>

如何让 Selenium WebDriver 等待组合预期条件?

基本上,Java 的类似问题是 asked和 answered ,但是这种方法 OR ( docs ) 不适用于 Python 绑定(bind)(GitHub 上的 expected_conditions.py)

我有一个非常慢的回调,导致以下情况之一:

  • id=_report_success 的 div,如果一切都已正确加载
  • id=_report_error 的 div,以防出现任何故障

所以,我需要等到 _report_success 或 _report_error 变得可见。

另外,这些条件非常简单:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
 
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, '_report_success'))) 
 
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.ID, '_report_error'))) 

在 Java 中,组合版本如下所示:

driverWait.until(ExpectedConditions.or( 
        ExpectedConditions.presenceOfElementLocated(...), 
        ExpectedConditions.presenceOfElementLocated(...) 
)); 

当然,我可以做一个循环并用一个时间间隔检查两者是否存在(实际上就像它在 WebDriverWait.until 中实现的那样),但我正在寻找更优雅和灵活的解决方案。毕竟,如果满足此类需求的方法存在于 Java 版本中,为什么它不存在于 Python 绑定(bind)中?