如何在Selenium WebDriver中处理间歇性警报?

时间:2017-08-03 04:37:55

标签: java selenium alert

我有自动化场景,有时系统会返回javascript警报,有时根本不会。我不知道是什么原因,可能是网络问题。我已经为此创建了警报处理程序:

public boolean isAlertPresent() {
    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.alertIsPresent());
    return true;
}

我在我的一个步骤中称之为有时出现警报:

public WSSPage enterAndSearchContent(String title) throws InterruptedException {
    waitForElementTextWithEnter(searchTextField, title);
    while (isAlertPresent()){
        Alert alert = driver.switchTo().alert();
        alert.dismiss();
        break;
    }
    return PageFactory.initElements(driver, WSSPage.class);
}

问题是当警报没有显示时,它会给我NoAlertPresentException,并且自动结果将失败。如果通过移动到下一行没有发生警报,​​我希望代码继续前进,在这种情况下,它将返回PageFactory.initElements(driver, WSSPage.class); 你能帮我提供更好的代码吗? 非常感谢。

3 个答案:

答案 0 :(得分:2)

JavascriptExecutor为你工作。在点击调用警报的事件之前,请务必执行它。

((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");

注意: - 点击调用警报确认框的事件后不要使用它。默认情况下,上面的代码将确认框设置为true表示您接受/单击该页面上所有确认框上的确定(如果被调用)

希望它会对你有所帮助:)。

答案 1 :(得分:1)

您可以修改方法isAlertPresent,如下所示并尝试一下。它可能对你有帮助。

public boolean isAlertPresent() {
    try{
       WebDriverWait wait = new WebDriverWait(driver, 5);
       wait.until(ExpectedConditions.alertIsPresent());
       return true;
    }
    catch (NoAlertPresentException noAlert) {
      return false;
    }
    catch (TimeoutException timeOutEx){
      return false;
    }
}

答案 2 :(得分:0)

您可以在try catch中包含该特定异常。然后将捕获异常,并且不会通过任何错误,您的执行将继续。 还要创建一个隐式等待,以便用更少的时间戳来处理它。