我正在使用 selenium 和 selenoid 在 pytest 中编写测试。
我想等一下,看看两个文本中的一个是否可见。
像这样的东西:
wait_for_text(text1 OR text2)
有没有办法直接做到这一点而不使用try and catch?
使用 XPATH 逻辑或
这将有助于将每个条件检查的 webdriver 请求计数限制为 1。
wait.until(expected_conditions.presence_of_element_located((By.XPATH, "//*[(text()='text1') or (text()='text2')]")))
您可以将这两个检查组合在一个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']"))
有关更多详细信息,请参阅此处的原始解决方案参考
要等待任一文本可见,您可以为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和lambda,您可以通过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
您可以在以下位置找到一些相关的讨论: