[英]How to handle intermittent alert in Selenium WebDriver?
我有自动化场景,有时系统返回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);
你能帮我提供更好的代码吗? 非常感谢。
JavascriptExecutor为你工作。 在单击调用警报的事件之前,请务必执行它。
((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
注意: - 点击调用警报确认框的事件后不要使用它。 默认情况下,上面的代码将确认框设置为true表示如果调用,则表示您接受/单击该页面上所有确认框中的确定
希望它能帮到你:)
您可以修改方法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中包含该特定异常。 然后将捕获异常,并且不会通过任何错误,您的执行将继续。 还可以使用较少的时间戳创建隐式等待来处理此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.