Python selenium一次完成两个xpath测试

Python selenium一次完成两个xpath测试,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我尝试结合检查两种情况: 如果startupcheck失败,我们会得到一个重试按钮: el = WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable((By.NAME, "Try again"))) 或startupcheck成功我们在自定义对象中获得pin输入请求: el = WebDriverWait(self.driver, 20).until( EC.element_to_be_clickable((B

我尝试结合检查两种情况:

如果startupcheck失败,我们会得到一个重试按钮:

el = WebDriverWait(self.driver, 10).until(
  EC.element_to_be_clickable((By.NAME, "Try again")))
或startupcheck成功我们在自定义对象中获得pin输入请求:

el = WebDriverWait(self.driver, 20).until(
  EC.element_to_be_clickable((By.XPATH, "//Custom/Edit")))
如何将其合并为一个检查,而不必同时检查: 我尝试了以下方法:

check = WebDriverWait(self.driver, 20).until(
  EC.element_to_be_clickable(
    (By.XPATH, "//Custom/Edit") or (By.NAME, "Try again")
))

但只检查第一个or语句。

您可以使用or子句通过lambda表达式对两个元素进行组合检查,如下所示:

el = WebDriverWait(driver, 20).until(lambda x: (x.find_element_by_name("Try again"), x.find_element_by_xpath("//Custom/Edit")))
el = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='Try again'], Custom>Edit")))
另一种解决办法是:

el = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.NAME,"Try again") and driver.find_element(By.XPATH,"//Custom/Edit"))
作为替代方案,您可以使用以下等效工具对两个元件进行联合收割机检查:

el = WebDriverWait(driver, 20).until(lambda x: (x.find_element_by_name("Try again"), x.find_element_by_xpath("//Custom/Edit")))
el = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='Try again'], Custom>Edit")))
工具书类
您可以通过lambda表达式使用OR子句对这两个元素进行组合检查,如下所示:

el = WebDriverWait(driver, 20).until(lambda x: (x.find_element_by_name("Try again"), x.find_element_by_xpath("//Custom/Edit")))
el = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='Try again'], Custom>Edit")))
另一种解决办法是:

el = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.NAME,"Try again") and driver.find_element(By.XPATH,"//Custom/Edit"))
作为替代方案,您可以使用以下等效工具对两个元件进行联合收割机检查:

el = WebDriverWait(driver, 20).until(lambda x: (x.find_element_by_name("Try again"), x.find_element_by_xpath("//Custom/Edit")))
el = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='Try again'], Custom>Edit")))
工具书类
太棒了,我希望这是关于两个问题的官方文件:我不熟悉使用OR条款的术语club up。这是什么意思?另外,在备选示例代码中,为什么条件之间存在and而不是or?@rothloup这些是lambda表达式,用于等待预期条件。关于一个更简单的例子,请参见讨论@DebanjanB:我知道它们是lambda表达式。我不明白club up是什么意思听起来像是一种口语,谷歌搜索的结果不多,也不明白为什么用AND检查OR条件。太棒了,我希望这是关于两个问题的官方文档:我不熟悉术语club up使用OR子句。这是什么意思?另外,在备选示例代码中,为什么条件之间存在and而不是or?@rothloup这些是lambda表达式,用于等待预期条件。关于一个更简单的例子,请参见讨论@DebanjanB:我知道它们是lambda表达式。我不明白club up是什么意思,听起来像是一种口语,谷歌搜索的结果不多,也不明白为什么用AND检查OR条件。