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

时间:2018-08-07 09:51:27

标签: python selenium selenium-webdriver

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

基本上,Java的类似问题是askedanswered,但是这种方法ORdocs)不适用于Python绑定({{3} }(在GitHub上)

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

  • 如果所有内容均已正确加载,则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绑定中?

1 个答案:

答案 0 :(得分:2)

您可以将css_selector用于OR

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