在我的页面上,我有时会显示警报。 (实际上是Salesforce中的通知)这些警报破坏了我的脚本,因为我的脚本找不到警报背后的元素。我想检查警报,如果存在,请将其关闭。如果不存在,请继续执行下一步。
第二个问题是这些警报可能不止一个。因此,它可能会消除1到6个或更多警报。
我已将此代码添加到我的测试脚本中,并且如果有一个警报,它将起作用。显然,如果有多个警报或警报为零,我的脚本将失败。
driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();
我仍在学习Java,请保持温柔。 ;)但是我很乐意将此方法放入一个方法中,以便它可以查找那些按钮,单击它们是否存在,继续寻找更多按钮,直到找不到任何按钮,然后继续操作。我只是不知道该怎么做。
我也在使用TestNG,我知道这在允许和不允许之间有所不同。
谢谢!
答案 0 :(得分:3)
You can use wait with try/catch to get all buttons and click on each if exist.
1.If alerts all appear at once use code below:
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 alerts appear singly use code below:
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){ }
答案 1 :(得分:1)
使用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.
答案 2 :(得分:0)
findElements
将返回列表,而无需再次创建列表。 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();
}