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

问题描述 投票:0回答:2

在我的页面上,我有时会显示警报。 (这些实际上是Salesforce中的通知)这些警报会破坏我的脚本,因为我的脚本无法找到警报背后的元素。我想查看警报,如果存在,请将其解雇。如果它们不存在,则继续下一步。

次要问题是这些警报可能不止一个。因此它可能会解除1到6个或更多警报的任何地方。

我已将此代码添加到我的测试脚本中,如果有一个警报,它就可以工作。如果有多个警报或者警报为零,我的脚本显然会失败。

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

我还在学习java,所以请保持温和。 ;)但是我喜欢将它放入一个方法中,以便它可以查找这些按钮,点击它们是否存在,继续寻找更多,直到它找不到,然后继续前进。我根本不知道该怎么做。

我也在使用TestNG,我知道这对于什么是允许的而不是什么是有用的。

谢谢!

java selenium if-statement webdriver alerts
2个回答
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.

3
投票

您可以使用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){ }
© www.soinside.com 2019 - 2024. All rights reserved.