WebDriverWait 预期条件中的逻辑运算符

Posted

技术标签:

【中文标题】WebDriverWait 预期条件中的逻辑运算符【英文标题】:Logic Operators in WebDriverWait Expected Conditions 【发布时间】:2018-02-19 04:34:07 【问题描述】:

我正在使用 Python / Selenium 提交表单,然后我让 Web 驱动程序通过使用类 ID 使用预期条件来等待加载下一页。

我的问题是可以显示两个页面,但它们不共享原始页面中没有的唯一元素(我可以找到)。一个页面的唯一类是mobile_txt_holder,而另一个可能的页面的类ID 是notfoundcopy我想使用等待出现的 mobile_txt_holdernotfoundcopy

是否可以将两个预期条件合并到一个等待中?

我正在寻找但显然行不通的基本想法:

WebDriverWait(driver, 30).until(EC.presence_of_element_located(
    (By.CLASS_NAME, "mobile_txt_holder")))
    or .until(EC.presence_of_element_located((By.CLASS_NAME, "notfoundcopy")))

我真的只需要编程等到下一页加载,以便我可以解析源代码。

示例 html

<p class="notfoundcopy">Unfortunately, the number you entered is not in our tracking system.</p>

【问题讨论】:

CSS Selector "(A or B) and C"?的可能重复 @JeffC 我是 Python 新手,所以也许我错了,但我正在寻找 Python 特定的答案。我相信您提供的链接仅适用于 CSS,不适用于 Python 用于搜索 CSS。 借助 Python 和 Selenium,您可以使用 CSS 选择器来定位元素。您可以创建一个 CSS 选择器,链接中的示例,它使用 OR 逻辑,这样您就可以得到您想要的。 @JeffC 哦,对不起,我不明白你在说什么。我看到了 DebanjanB 的解决方案,我现在可以看到你正在使用它。感谢您的帮助! 【参考方案1】:

除了将 2 expected_conditionsor 子句组合起来之外,我们还可以轻松地构造一个 CSS 来满足我们的要求以下CSS 将在 mobile_txt_holder 类或notfoundcopy类:

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".mobile_txt_holder, .notfoundcopy"))

您可以在selenium two xpath tests in one找到详细讨论

【讨论】:

谢谢!我不明白@JeffC 想告诉我什么。我会在早上试试这个然后回帖。现在在我的脑海里是有道理的。让我们看看我明天能不能把它翻译成代码。 最好不要回答重复的问题。它只会用更多相同的问题堵塞网站,而这些问题可以通过已经发布的重复链接来回答。

以上是关于WebDriverWait 预期条件中的逻辑运算符的主要内容,如果未能解决你的问题,请参考以下文章

当 Selenium 中的预期条件失败时,不遵守 waitTime

WebDriverWait 未按预期工作

Ansible playbook 上的“何时”条件无法使用运算符按预期工作

python中的条件语句,分支语句以及逻辑运算符和比较运算符

R中的运算符,条件语句,控制语句

带有双条件和 || 的 While 循环Swift 中的逻辑运算符