2014-11-22 39 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

相關問題