我必须明确等待 20 秒才能出现警报。如果 20 秒后警报不存在,我应该抛出异常。以下是我等待警报,但它在 20 秒之前抛出未处理的警报异常。有人可以帮我解决这个问题吗?
try {
new WebDriverWait(driver, 20).ignoring(NoAlertPresentException.class)
.ignoring(UnhandledAlertException.class)
.until(ExpectedConditions.alertIsPresent());
} catch (Exception e) {
}
最佳答案
编写您自己的 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
并继续执行您的代码。
如果您想处理此警报,您必须自行切换到警报。
关于java - Selenium webdriver 显式等待警报抛出 UnhandledAlertException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373356/