2011-11-23 45 views
34

Tôi muốn phát hiện xem cảnh báo có bật lên hay không. Hiện nay tôi đang sử dụng đoạn mã sau:Xử lý cảnh báo trong Selenium WebDriver (selenium 2) bằng 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) { 
    } 

Vấn đề là nếu không có cảnh báo về tình trạng hiện tại của trang web, nó chờ đợi trong một khoảng thời gian cụ thể cho đến khi thời gian chờ được đạt tới, sau đó ném một ngoại lệ và do đó hiệu suất thực sự tồi tệ.

Có cách nào tốt hơn, có thể là trình xử lý sự kiện cảnh báo mà tôi có thể sử dụng cho các cảnh báo tự động không?

Trả lời

69

Đây là những gì làm việc cho tôi sử dụng Chờ Explicit từ đây 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

Điều đó thật thú vị và có thể làm được điều này. Có thể đặt thời gian chờ của phương thức chờ thành 0 không? – Alp

0

Bạn có thể thử

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

Nếu điều đó không làm việc, bạn có thể thử lặp qua tất cả các cửa sổ xử lý và xem các cảnh báo tồn tại. Tôi không chắc liệu cảnh báo có mở cửa sổ mới bằng selen hay không.

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

Đáng buồn thay, cả hai giải pháp không làm việc. Việc đầu tiên là chậm như mã của tôi bởi vì nó đã tạo ra ngoại lệ trong khi có một thời gian chờ. Thứ hai không nhận ra cảnh báo. – Alp

+0

Xin lỗi, nó rất đáng để bắn lol. –

+0

@Reid Mac - câu trả lời của bạn đã làm việc cho tôi. – djangofan

15

Viết phương pháp sau:

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

Bây giờ, bạn có thể kiểm tra xem cảnh báo là hiện tại hay không bằng cách sử dụng phương pháp được viết ở trên như sau:

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

alert.accept(); 

Bạn cũng có thể từ chối các hộp cảnh báo:

 

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"); 
    } 
Các vấn đề liên quan