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

Java 如何处理Selenium WebDriver中的间歇性警报?,java,selenium,alert,Java,Selenium,Alert,我有一个自动化场景,有时系统返回javascript警报,有时根本不返回。我不知道这是什么原因,可能是网络问题。我已经为此创建了警报处理程序: public boolean isAlertPresent() { WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.alertIsPresent()); return true; } 我称之为我的一个步骤,有时会出现

我有一个自动化场景,有时系统返回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)
你能帮我提供一个更好的代码吗?

非常感谢。

您可以修改下面给出的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;
    }
}

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

JavascriptExecutor为您工作。只需注意在单击调用警报的事件之前执行它

((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
注意:-单击调用警报确认框的事件后,不要使用它。以上代码默认情况下,将确认框设置为true表示您正在接受/如果调用,请单击该页面上所有确认框上的ok


<>希望能帮助你:

你能考虑改变<代码>(ISActReStEnter())< /C> > <代码>(ISActReStutter())< /C>?Thanks@DebanjanB是的。在没有警报的情况下,它仍然不会产生警报感知。为什么
总是返回true来自
公共布尔值isAlertPresent()
?如果不存在警报,我们能否返回
false
?尝试从
public boolean isAlertPresent()
返回
boolean
值。根据返回类型,我们将在
enterAndSearchContent()
中处理这种情况。谢谢我想,murthi的解决方案对你有用。谢谢。我想这不起作用,因为
等待.until(ExpectedConditions.alertIsPresent())将在没有警报时引发异常。通常,预期条件将引发超时异常。你可以试试这个。我已经更新了答案部分。哇。。。这对我来说很有用。我甚至不需要再使用警报处理程序了。非常感谢你!我已经投了赞成票,但遗憾的是我没有足够的声誉在你的回答中公开展示。再次感谢!没问题。。您现在只需要2分即可获得此特权;)