0

我正在使用 selenium 和 selenoid 在 pytest 中编写测试。
我想等一下,看看两个文本中的一个是否可见。
像这样的东西:

wait_for_text(text1 OR text2)

有没有办法直接做到这一点而不使用try and catch?

4

3 回答 3

2

使用 XPATH 逻辑或

这将有助于将每个条件检查的 webdriver 请求计数限制为 1。

wait.until(expected_conditions.presence_of_element_located((By.XPATH, "//*[(text()='text1') or (text()='text2')]")))
于 2022-02-02T10:03:49.867 回答
1

您可以将这两个检查组合在一个wait()操作中 - 通过使用 python 的 lambda 表达式,使用与find_elements_*()粘合在一起的方法or

wait.until(lambda x: x.find_elements_by_xpath("//*[text()='text1']") or x.find_elements_by_xpath("//*[text()='text1']"))

有关更多详细信息,请参阅此处的原始解决方案参考

于 2022-02-02T09:45:26.710 回答
1

等待任一文本可见,您可以为visibility_of_element_located()引入WebDriverWait ,并且您可以使用以下任一Locator Strategies

  • 使用XPath,您可以通过OR条件传递表达式,如下所示:

    element = WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH, "//*[text()='textA' or text()='textB']"))
    
  • 使用XPath,您可以通过OR条件传递表达式,如下所示:

    element = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.XPATH,"//*[text()='textA']") or driver.find_element(By.XPATH,"//*[text()='textB']"))
    
  • 注意:您必须添加以下导入:

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

参考

您可以在以下位置找到一些相关的讨论:

于 2022-02-02T12:26:11.813 回答