Selenium webdriver显式等待警告抛出UnhandledAlertException

时间:2017-02-21 16:53:27

标签: java selenium exception-handling alert

我必须明确等待20秒才能显示警报。如果20秒后没有警报,我应该抛出异常。以下是我等待警报,但它在20秒之前抛出未处理的警报异常。有人可以帮我吗?

try {
    new WebDriverWait(driver, 20).ignoring(NoAlertPresentException.class)
            .ignoring(UnhandledAlertException.class) 
            .until(ExpectedConditions.alertIsPresent());

} catch (Exception e) {
}

1 个答案:

答案 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并继续使用您的代码。

如果您想要处理此警报,则必须自行切换到警报。