我必须明确等待20秒才能显示警报。如果20秒后没有警报,我应该抛出异常。以下是我等待警报,但它在20秒之前抛出未处理的警报异常。有人可以帮我吗?
try {
new WebDriverWait(driver, 20).ignoring(NoAlertPresentException.class)
.ignoring(UnhandledAlertException.class)
.until(ExpectedConditions.alertIsPresent());
} catch (Exception e) {
}
答案 0 :(得分:2)
如何编写自己的ExpectedConditions
课程?
public abstract class MyExpectedConditions {
public static ExpectedCondition<Boolean> waitForAlert() {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
driver.switchTo().alert();
driver.switchTo().defaultContent();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
};
}
}
用法:
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(MyExpectedConditions.waitForAlert());
说明:
WebDriverWait会在20秒内导致切换到警报。如果不存在警报,则Exception
被抓住。如果driver
成功切换为alert
,则会返回defaultContent
并继续使用您的代码。
如果您想要处理此警报,则必须自行切换到警报。