Selenium WebDriver Java-如何执行“如果存在,则单击,否则跳过”?

时间:2018-09-18 17:47:48

标签: java selenium if-statement webdriver alerts

在我的页面上,我有时会显示警报。 (实际上是Salesforce中的通知)这些警报破坏了我的脚本,因为我的脚本找不到警报背后的元素。我想检查警报,如果存在,请将其关闭。如果不存在,请继续执行下一步。

第二个问题是这些警报可能不止一个。因此,它可能会消除1到6个或更多警报。

我已将此代码添加到我的测试脚本中,并且如果有一个警报,它将起作用。显然,如果有多个警报或警报为零,我的脚本将失败。

driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();

我仍在学习Java,请保持温柔。 ;)但是我很乐意将此方法放入一个方法中,以便它可以查找那些按钮,单击它们是否存在,继续寻找更多按钮,直到找不到任何按钮,然后继续操作。我只是不知道该怎么做。

我也在使用TestNG,我知道这在允许和不允许之间有所不同。

谢谢!

3 个答案:

答案 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();
}