我有自动化场景,有时系统会返回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);
你能帮我提供更好的代码吗?
非常感谢。
答案 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中包含该特定异常。然后将捕获异常,并且不会通过任何错误,您的执行将继续。 还要创建一个隐式等待,以便用更少的时间戳来处理它。