Java 如何处理Selenium WebDriver中的间歇性警报?
我有一个自动化场景,有时系统返回javascript警报,有时根本不返回。我不知道这是什么原因,可能是网络问题。我已经为此创建了警报处理程序: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; } 我称之为我的一个步骤,有时会出现
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分即可获得此特权;)