任何内置的分支等待 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 和 lambda 您可以通过 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 和 lambda 您可以通过 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) {
}
单击网页上的按钮后,可能会发生以下两种情况之一。通常,我会等到只有一个事件结果出现,但是是否有任何内置方法可以让我等到两件事中的一件发生,即两个元素之一存在?
要等待两个元素中的任何一个,您可以通过 OR
选项为两个元素中的任何一个引入 WebDriverWait,您可以使用其中一个以下方法:
使用 CssSelector 你可以传递用逗号分隔的表达式,如下所示:
element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".classA, .classB"))
使用 CssSelector 和 lambda 您可以通过
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 和 lambda 您可以通过
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) {
}