java - 如何在零隐式等待的情况下检查 Selenium 中是否存在警报

标签 java javascript selenium

在少数地方,我面临一些未处理的警报,因此对于计划检查警报是否存在的每次点击,我都使用以下代码,

public boolean isAlertPresent(){
    try{
        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
        Alert a=driver.switchTo().alert();
        a.accept();
        return true;
    }
    catch (NoAlertPresentException e) {
        return false;
    }
    finally{
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }
}    

但上面的代码需要一些时间来检查警报是否存在,因为我打算对每次点击都使用这种方法,等待的成本太高,使上面代码中的隐式等待为零没有效果。任何人都可以帮忙吗?

最佳答案

隐式等待用于分配全局超时,这意味着一旦分配,selenium 将在每次尝试查找元素时等待该时间(最大)。另一方面,显式等待可用于专门为网页中的任何元素分配超时,它会覆盖隐式等待设置的超时。

因此,对于上述情况,您可以像这样尝试显式等待:

public boolean isAlertPresent(){ 
    try{ 
        Alert a = new WebDriverWait(driver, 10).until(ExpectedConditions.alertIsPresent());
        if(a!=null){
            System.out.println("Alert is present");
            driver.switchTo().alert().accept();
            return true;
        }else{
            throw new Throwable();
        }
    } 
    catch (Throwable e) {
        System.err.println("Alert isn't present!!");
        return false; 
    } 

} 

这将在 10 秒内检查警报是否存在。如果它在其中找到警报,它将返回“true”,否则它将返回“false”。

关于java - 如何在零隐式等待的情况下检查 Selenium 中是否存在警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074625/

相关文章:

java - MediaCodec.createInputSurface() 在 Android 模拟器中抛出 IllegalStateException(错误 -38)

java - 如何检查应用程序是否在 FXML Controller 中关闭

javascript - 我无法获取按钮 | 上的 value 属性jQuery AJAX

java - TakesScreenshot 无法解析为 Selenium WebDriver 中的类型

java - UnreachableBrowserException 尝试使用 IEDriver 在 Selenium Webdriver 中启动

java - Gradle Jax-RS Mysql Jetty 项目无法正常工作

java - 工具提示在 struts 2 的 jfree 图表中不起作用

javascript - 在 js 中监听 laravel livewire 生命周期钩子(Hook)

javascript - 从 Vue.JS 中的函数渲染 JSX

selenium - Protractor 套件未正确执行