【问题标题】:How can I check whether alert is present in selenium with zero implicit wait如何以零隐式等待检查硒中是否存在警报
【发布时间】:2015-01-20 09:09:55
【问题描述】:

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

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);
    }
}    

但是上面的代码需要一些时间来检查alert是否存在,因为我每次点击都会使用这个方法,等待的代价太高了,上面代码中的隐式等待为零没有效果。有人可以帮忙吗?

【问题讨论】:

  • 在“可能重复”的问题中,有一个可能符合您需求的答案 - 它遵循 EAFP 方法:尝试切换并处理异常,重复。
  • @alecxe 我的需求与此有所不同,我的问题非常具体,即在没有任何隐式等待的情况下检查警报。比如说,如果让隐式等待为零并显示检查一个元素,它会立即给出结果,但是在检查警报时,情况并非如此,即使在隐式等待为零后,它也在等待一段时间。跨度>

标签: java javascript selenium


【解决方案1】:

隐式等待用于分配全局超时,这意味着一旦分配,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'。

【讨论】:

  • 这应该是答案。
  • 嗨,Subh,我不想等待 10 秒来检查警报是否存在,我想在 0 秒内立即检查,因为我要检查自动化中的每次点击
  • @MuthuKumar:在上面设置显式等待时,等待时间范围为 10 秒。这意味着,每当警报出现时,可能是几毫秒,或者更多(最多 10 秒),然后它将被切换到,然后将继续执行进一步的操作。但是,如果您想等待几毫秒,请尝试以下代码:Alert a = new WebDriverWait(driver,0,500).until(ExpectedConditions.alertIsPresent()); 它将等待 500 毫秒的警报。
  • 为什么这个函数需要是布尔值?我的意思是它总是接受警报,不管你想不想接受。当它返回 false/true 时我该怎么办?
  • @paul 我刚刚修改了 OP 的方法,其中返回类型已经是布尔值。您也可以根据需要更改返回类型,例如“String”,或者也可以将其保留为无效。在上述情况下,断言警报是否存在会很有帮助;这里考虑了浏览器警报。例如,如果它是 DEV 在浏览器中显式生成的警报/模态,则上述方法将返回 false,从而推断警报不存在,您可以进行相应的修改。您可以通过打印堆栈跟踪来进一步优化该方法以跟踪确切的问题。
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2018-08-05
  • 2021-03-29
  • 1970-01-01
相关资源
最近更新 更多