web-dev-qa-db-fra.com

Comment vérifier si une alerte existe avec WebDriver?

Je dois vérifier l'existence d'Alert dans WebDriver.

Parfois, une alerte s'affiche, mais parfois, elle ne s'affiche pas. Je dois vérifier si l'alerte existe en premier, puis je peux l'accepter ou la rejeter ou elle dira: aucune alerte trouvée.

55
Yunfei Gu
public boolean isAlertPresent() 
{ 
    try 
    { 
        driver.switchTo().alert(); 
        return true; 
    }   // try 
    catch (NoAlertPresentException Ex) 
    { 
        return false; 
    }   // catch 
}   // isAlertPresent()

consultez le lien ici https://groups.google.com/forum/?fromgroups#!topic/webdriver/1GaSXFK76zY

76
ManMohan Vyas

Ce qui suit (implémentation C #, mais similaire en Java) vous permet de déterminer s’il existe une alerte sans exception ni créer l’objet WebDriverWait.

boolean isDialogPresent(WebDriver driver) {
    IAlert alert = ExpectedConditions.AlertIsPresent().Invoke(driver);
    return (alert != null);
}
20
Lee Jensen

Je suggère d'utiliser ExpectedConditions et alertIsPresent () . ExpectedConditions est une classe wrapper qui implémente les conditions utiles définies dans ExpectedCondition interface.

WebDriverWait wait = new WebDriverWait(driver, 300 /*timeout in seconds*/);
if(wait.until(ExpectedConditions.alertIsPresent())==null)
    System.out.println("alert was not present");
else
    System.out.println("alert was present");
9
nilesh

J'ai trouvé que l'exception de driver.switchTo().alert(); était si lente dans Firefox (FF V20 & Selenium-Java-2.32.0).

Alors je choisis une autre manière:

    private static boolean isDialogPresent(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (UnhandledAlertException e) {
            // Modal dialog showed
            return true;
        }
    }

Et c'est une meilleure solution lorsque la plupart de vos cas de test ne contiennent AUCUN dialogue (l'exception de lancement est coûteuse).

7
andyf

Je suggère d'utiliser ExpectedConditions et alertIsPresent () . ExpectedConditions est une classe wrapper qui implémente les conditions utiles définies dans ExpectedCondition interface.

public boolean isAlertPresent(){
    boolean foundAlert = false;
    WebDriverWait wait = new WebDriverWait(driver, 0 /*timeout in seconds*/);
    try {
        wait.until(ExpectedConditions.alertIsPresent());
        foundAlert = true;
    } catch (TimeoutException eTO) {
        foundAlert = false;
    }
    return foundAlert;
}

Note: Ceci est basé sur la réponse de nilesh, mais adapté pour attraper l'exception TimeoutException qui est levée par la méthode wait.until ().

5
Vince Bowdren

public boolean isAlertPresent () {

try 
{ 
    driver.switchTo().alert(); 
    system.out.println(" Alert Present");
}  
catch (NoAlertPresentException e) 
{ 
    system.out.println("No Alert Present");
}    

}

1
Vikas

Ce code vérifiera si l'alerte est présente ou non.

public static void isAlertPresent(){
    try{
    Alert alert = driver.switchTo().alert();
    System.out.println(alert.getText()+" Alert is Displayed"); 
    }
    catch(NoAlertPresentException ex){
    System.out.println("Alert is NOT Displayed");
    }
    }
1
Vishnu B S

ExpectedConditions est obsolète, donc:

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.AlertIsPresent());

C # Selenium 'ExpectedConditions est obsolète'

0
CarolCiola
public static void handleAlert(){
          if(isAlertPresent()){
              Alert alert = driver.switchTo().alert();
              System.out.println(alert.getText());
              alert.accept();
            }
          }
          public static boolean isAlertPresent(){
          try{
              driver.switchTo().alert();
              return true;
              }catch(NoAlertPresentException ex){
                    return false;
              }
          }
0
Naveen