Selenium WebDriver Java - 如何执行 "if exists, then click, else skip"?
Selenium WebDriver Java - how to perform "if exists, then click, else skip"?
在我的页面上,有时会显示提醒。 (这些实际上是 Salesforce 中的通知)这些警报破坏了我的脚本,因为我的脚本无法找到警报背后的元素。我想检查警报,如果它们存在,请将其关闭。如果它们不存在,则继续下一步。
第二个问题是这些警报可能不止一个。因此,它可能会在任何地方关闭 1 到 6 个或更多警报。
我已将这段代码添加到我的测试脚本中,如果有一个警报,它就会起作用。显然,如果有多个警报或警报为零,我的脚本就会失败。
driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();
我还在学习java,所以请温柔点。 ;) 但我很想将其放入一个方法中,以便它可以查找那些按钮,如果它们存在则单击,继续查找直到找到 none,然后继续。我只是不知道该怎么做。
我也在使用 TestNG,我知道这在允许和不允许的方面有所不同。
谢谢!
使用 findElements
如果元素不存在,这将 return 一个 0 列表。
例如:
List<WebElement> x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));
if (x.size() > 0)
{
x.get(0).click();
}
// else element is not found.
您可以使用等待和 try/catch 来获取所有按钮,如果存在则单击每个按钮。
1.If 使用以下代码立即显示所有警报:
try{
new WebDriverWait(driver, 5)
.ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("button[title*='Dismiss notification']"))))
.forEach(WebElement::click);
} catch (Exception ignored){ }
2.If 单独使用以下代码出现警报:
try{
while(true) {
new WebDriverWait(driver, 5)
.ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("button[title*='Dismiss notification']"))))
.click();
}
} catch (Exception ignored){ }
findElements
将 return 列表无需重新创建。 x.size()
也不起作用,因为列表对象没有属性大小,所以我们必须检查长度。无需使用 x.get(0).click();
.
driver.click(By.xpath("//button[contains(@title,'Dismiss notification')]"))
应该可以。
x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));
if (len(x) > 0) {
x.click();
}
在我的页面上,有时会显示提醒。 (这些实际上是 Salesforce 中的通知)这些警报破坏了我的脚本,因为我的脚本无法找到警报背后的元素。我想检查警报,如果它们存在,请将其关闭。如果它们不存在,则继续下一步。
第二个问题是这些警报可能不止一个。因此,它可能会在任何地方关闭 1 到 6 个或更多警报。
我已将这段代码添加到我的测试脚本中,如果有一个警报,它就会起作用。显然,如果有多个警报或警报为零,我的脚本就会失败。
driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();
我还在学习java,所以请温柔点。 ;) 但我很想将其放入一个方法中,以便它可以查找那些按钮,如果它们存在则单击,继续查找直到找到 none,然后继续。我只是不知道该怎么做。
我也在使用 TestNG,我知道这在允许和不允许的方面有所不同。
谢谢!
使用 findElements
如果元素不存在,这将 return 一个 0 列表。
例如:
List<WebElement> x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));
if (x.size() > 0)
{
x.get(0).click();
}
// else element is not found.
您可以使用等待和 try/catch 来获取所有按钮,如果存在则单击每个按钮。
1.If 使用以下代码立即显示所有警报:
try{
new WebDriverWait(driver, 5)
.ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("button[title*='Dismiss notification']"))))
.forEach(WebElement::click);
} catch (Exception ignored){ }
2.If 单独使用以下代码出现警报:
try{
while(true) {
new WebDriverWait(driver, 5)
.ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("button[title*='Dismiss notification']"))))
.click();
}
} catch (Exception ignored){ }
findElements
将 return 列表无需重新创建。 x.size()
也不起作用,因为列表对象没有属性大小,所以我们必须检查长度。无需使用 x.get(0).click();
.
driver.click(By.xpath("//button[contains(@title,'Dismiss notification')]"))
应该可以。
x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));
if (len(x) > 0) {
x.click();
}