2014-11-22 59 views
1

在几个地方,现在面临一些未处理的警报,因此每次点击的规划,以检查是否警报存在,对于正在使用下面的代码,如何检查警报是否存在与零隐含硒等

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

但上面的代码需要一些时间来检查警报是否存在,因为我将对每次点击使用此方法,其等待时间太长,使得上述代码中的隐式等待零不起作用。任何人都可以为此提供帮助。

+0

可能重复[如何等待Selenium webdriver中的警报?](http://stackoverflow.com/questions/12639280/how-to-wait-for-an-alert-in-selenium-webdriver) – alecxe 2014-11-22 06:12:56

+0

在“可能重复”的问题中,有一个答案可能适合您的需求 - 它遵循“EAFP”方法:尝试切换并处理异常,重复。 – alecxe 2014-11-22 06:14:02

+0

@alecxe我的需求与此有点不同,我的问题是非常具体地检查一个没有任何隐含的等待的警报。举例来说,如果使隐式等待零并检查显示的元素,它会立即给出结果,但在检查警报时,情况并非如此,即使在将隐式等待为零之后,它仍在等待某个时间。 – 2014-11-22 06:20:23

回答

3

隐式等待是用于分配全局超时,这意味着一旦分配,硒将等待这段时间(最大),每次它试图找到一个元素。另一方面,显式等待在将超时分配给网页中的任何元素时非常有用,并且它会覆盖由隐式等待设置的超时。

因此,针对上述情况,你可以尝试显式的等待,而不是像这样:

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'。

+0

这应该是答案。 – Saifur 2014-11-22 15:35:14

+0

嗨Subh,我不想等待10秒来检查警报是否存在,我想在0秒内立即检查,因为我要检查它是否每次点击自动化 – 2014-11-23 17:31:28

+0

@MuthuKumar:当显式等待对于上述情况,等待时间的范围为10秒。这意味着,无论什么时候警报进入画面,可能会持续几毫秒或更长时间(最多10秒),然后它会切换到,并且进一步的操作将继续进行。但是,如果您想等待几毫秒,请尝试以下代码:'Alert a = new WebDriverWait(driver,0,500).until(ExpectedConditions.alertIsPresent());'它将等待500毫秒的警报。 – Subh 2014-11-23 17:43:25