2011-11-23 79 views
34

我想要檢測是否彈出警報。目前我使用下面的代碼:Selenium WebDriver(selenium 2)和Java中的警報處理

try { 
     Alert alert = webDriver.switchTo().alert(); 

     // check if alert exists 
     // TODO find better way 
     alert.getText(); 

     // alert handling 
     log().info("Alert detected: {}" + alert.getText()); 
     alert.accept(); 
    } catch (Exception e) { 
    } 

的問題是,如果對網頁的當前狀態沒有警覺,等待達到超時,直到特定的時間量,然後拋出一個異常,因此表現非常糟糕。

有沒有更好的方法,可能是一個警報事件處理程序,我可以用它來動態發生警報?

回答

69

這是使用顯式的等待從這裏WebDriver: Advanced Usage

public void checkAlert() { 
    try { 
     WebDriverWait wait = new WebDriverWait(driver, 2); 
     wait.until(ExpectedConditions.alertIsPresent()); 
     Alert alert = driver.switchTo().alert(); 
     alert.accept(); 
    } catch (Exception e) { 
     //exception handling 
    } 
} 
+1

這很有趣,可以做到這一點。是否可以將等待方法的超時設置爲零? – Alp

0

你可以嘗試

try{ 
     if(webDriver.switchTo().alert() != null){ 
      Alert alert = webDriver.switchTo().alert(); 
      alert.getText(); 
      //etc. 
     } 
    }catch(Exception e){} 

如果不工作,你可以嘗試通過所有的窗口句柄循環,看看是否存在警報。我不確定警報是否會作爲使用硒的新窗口打開。

for(String s: webDriver.getWindowHandles()){ 
//see if alert exists here. 
} 
+0

可悲的是,這兩種解決方案不起作用。第一個和我的代碼一樣慢,因爲它在超時時已經創建了異常。第二個不能識別警報。 – Alp

+0

對不起,這是值得一炮。 –

+0

@Reid Mac - 你的答案適合我。 – djangofan

15

寫下面的方法什麼工作對我來說:

public boolean isAlertPresent() { 
    try { 
     driver.switchTo().alert(); 
     return true; 
    } // try 
    catch (Exception e) { 
     return false; 
    } // catch 
} 

現在,您可以檢查警報是否存在或不使用上面寫的方法如下:

if (isAlertPresent()) { 
    driver.switchTo().alert(); 
    driver.switchTo().alert().accept(); 
    driver.switchTo().defaultContent(); 
} 
3
 
Alert alert = driver.switchTo().alert(); 

alert.accept(); 

你也可以拒絕該提示框:

 

Alert alert = driver.switchTo().alert(); 

alert().dismiss(); 
2
try 
    { 
     //Handle the alert pop-up using seithTO alert statement 
     Alert alert = driver.switchTo().alert(); 

     //Print alert is present 
     System.out.println("Alert is present"); 

     //get the message which is present on pop-up 
     String message = alert.getText(); 

     //print the pop-up message 
     System.out.println(message); 

     alert.sendKeys(""); 
     //Click on OK button on pop-up 
     alert.accept(); 
    } 
    catch (NoAlertPresentException e) 
    { 
     //if alert is not present print message 
     System.out.println("alert is not present"); 
    }