在我的页面上,我有时会显示警报。 (这些实际上是Salesforce中的通知)这些警报会破坏我的脚本,因为我的脚本无法找到警报背后的元素。我想查看警报,如果存在,请将其解雇。如果它们不存在,则继续下一步。
次要问题是这些警报可能不止一个。因此它可能会解除1到6个或更多警报的任何地方。
我已将此代码添加到我的测试脚本中,如果有一个警报,它就可以工作。如果有多个警报或者警报为零,我的脚本显然会失败。
driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();
我还在学习java,所以请保持温和。 ;)但是我喜欢将它放入一个方法中,以便它可以查找这些按钮,点击它们是否存在,继续寻找更多,直到它找不到,然后继续前进。我根本不知道该怎么做。
我也在使用TestNG,我知道这对于什么是允许的而不是什么是有用的。
谢谢!
使用findElements
,如果元素不存在,将返回0的列表。
E.G:
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 with try / catch来获取所有按钮并单击每个按钮(如果存在)。
1.如果一次出现警报,请使用以下代码:
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.如果单独出现警报,请使用以下代码:
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){ }