关于python:Selenium WebDriver等到合并的ExpectedConditions(AND,OR,NOT运算符)

Selenium WebDriver wait until combined ExpectedConditions (AND, OR, NOT operators)

本问题已经有最佳答案,请猛点这里访问。

如何使Selenium WebDriver等到合并的预期条件?

基本上已经询问并回答了关于Java的类似问题,但是Python绑定没有这样的方法OR(docs)(GitHub上的expected_conditions.py)

我的回调很慢,导致出现以下情况之一:

  • 如果所有内容均已正确加载,则id为_report_success的div
  • 如果发生任何故障,则id为_report_error的div

因此,我需要等到_report_success_report_error变为可见。

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

1
2
3
4
5
6
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中,合并后的版本如下所示:

1
2
3
4
driverWait.until(ExpectedConditions.or(
        ExpectedConditions.presenceOfElementLocated(...),
        ExpectedConditions.presenceOfElementLocated(...)
));

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


您可以将css_selector用于OR

1
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#_report_success, #_report_error')))