2011-11-23 3 views
34

के साथ सेलेनियम वेबड्राइवर (सेलेनियम 2) में अलर्ट हैंडलिंग मैं यह जानना चाहता हूं कि कोई अलर्ट पॉप अप हो गया है या नहीं।जावा

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

@ रीड मैक - आपका उत्तर मेरे लिए काम किया। – 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"); 
    }