87 votes

Comment vérifier si une alerte existe en utilisant WebDriver ?

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

Parfois, une alerte s'affiche, mais parfois elle ne s'affiche pas. Je dois d'abord vérifier si l'alerte existe, puis je peux l'accepter ou la rejeter, sinon le message suivant s'affiche : aucune alerte trouvée.

91voto

ManMohan Vyas Points 1492
public boolean isAlertPresent() 
{ 
    try 
    { 
        driver.switchTo().alert(); 
        return true; 
    }   // try 
    catch (NoAlertPresentException Ex) 
    { 
        return false; 
    }   // catch 
}   // isAlertPresent()

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

31voto

Lee Jensen Points 188

La méthode suivante (implémentation en C#, mais similaire en Java) vous permet de déterminer s'il y a une alerte sans exceptions et sans créer le fichier WebDriverWait objet.

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

13voto

nilesh Points 3914

Je suggère d'utiliser Conditions attendues y alertIsPresent() . ExpectedConditions est une classe enveloppante qui implémente les conditions utiles définies dans le document 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");

9voto

andyf Points 924

J'ai trouvé l'exception de capture de driver.switchTo().alert(); est si lent dans Firefox (FF V20 & selenium-java-2.32.0).

Alors je choisis une autre voie :

    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 comportent PAS de dialogue (lancer une exception coûte cher).

8voto

vincebowdren Points 1726

Je suggère d'utiliser Conditions attendues y alertIsPresent() . ExpectedConditions est une classe enveloppante qui implémente les conditions utiles définies dans le document 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;
}

Remarque : cette réponse est basée sur celle de nilesh, mais elle a été adaptée pour prendre en compte l'exception TimeoutException qui est levée par la méthode wait.until().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X