40 votes

Gestion des alertes dans Selenium WebDriver (selenium 2) avec Java

Je veux détecter si une alerte s'est déclenchée ou non. Actuellement, j'utilise le code suivant :

    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) {
    }

Le problème est que, s'il n'y a pas d'alerte sur l'état actuel de la page Web, il attend un certain temps jusqu'à ce que le délai d'attente soit atteint, puis il lève une exception et les performances sont donc très mauvaises.

Existe-t-il un meilleur moyen, peut-être un gestionnaire d'événements d'alerte que je peux utiliser pour les alertes qui se produisent dynamiquement ?

79voto

Leo Points 796

Voici ce qui a fonctionné pour moi en utilisant Explicit Wait d'ici WebDriver : Utilisation avancée

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
    }
}

16voto

Ripon Al Wasim Points 5161

Écrivez la méthode suivante :

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

Maintenant, vous pouvez vérifier si l'alerte est présente ou non en utilisant la méthode écrite ci-dessus comme ci-dessous :

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

3voto

ER.swatantra Points 115
Alert alert = driver.switchTo().alert();

alert.accept();

Vous pouvez également refuser la boîte d'alerte :

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

alert().dismiss();

2voto

user4562460 Points 21
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");
    }

0voto

Reid Mac Points 802

Vous pouvez essayer

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

Si cela ne fonctionne pas, vous pouvez essayer de parcourir en boucle toutes les poignées de fenêtre et voir si l'alerte existe. Je ne suis pas sûr que l'alerte s'ouvre dans une nouvelle fenêtre avec Selenium.

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

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