任何内置的分支等待 OR 条件的方法?

Any built-in way for branching waits with OR conditions?

单击网页上的按钮后,可能会发生以下两种情况之一。通常,我会等到只有一个事件结果出现,但是是否有任何内置方法可以让我等到两件事中的一件发生,即两个元素之一存在?

要等待两个元素中的任何一个,您可以通过 OR 选项为两个元素中的任何一个引入 WebDriverWait,您可以使用其中一个以下方法:

  • 使用 CssSelector 你可以传递用逗号分隔的表达式,如下所示:

    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".classA, .classB"))
    
  • 使用 CssSelector 您可以通过 OR 条件传递表达式,如下所示:

    element = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.CSS_SELECTOR, "tagname.classname") or driver.find_element(By.CSS_SELECTOR, "tagname#elementID"))
    
  • 使用 XPath 您可以通过 OR 条件传递表达式,如下所示:

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

    element = WebDriverWait(driver,20).until(lambda driver: driver.find_element(By.XPATH,"xpathA") or driver.find_element(By.XPATH,"xpathB"))
    

参考

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

你可以做到,说实话,这是在 java 我不知道 python 但这至少是一个想法,如果你有两个条件要满足,例如输入 1 存在并且输入 2 我将创建两个布尔变量,并将其放入其中 driver.findelements(by....).size()>0; 然后我将添加一个 if so 以防万一它们都显示它会崩溃或做我想做的事。 代码示例:

    Boolean AccesViaLogin = driver.findElements(By.id("username_login")).size() > 0;
    Boolean AccesViaHomepage = driver.findElements(By.xpath("//button[contains(text(),\"Connexion\")]")).size() > 0;
    if (AccesViaLogin == true && AccesViaHomepage == true) {
}