7
votes

Sélénium noalertSentExceptionException

J'essaie de gérer la boîte de dialogue (OK Annuler Type) avec Selenium WebDiver. Donc, mon objectif est de cliquer sur le bouton "OK".

scénario est:

  1. Cliquez sur le bouton pour appeler la boîte de dialogue

    bouton.click () ;

  2. essayer d'accepter

    webdiver.switchto (). ALERT (). Accepter () ;

    Mais je reçois toujours NoaleterPresentException et voyant que la boîte de dialogue se ferme presque immédiatement. Il me semble que Selenium ferme automatiquement la boîte de dialogue et quand je veux accepter, il n'y a rien à accepter.

    Je suis désolé pour mon mauvais anglais.


4 commentaires

Est-ce un problème de synchronisation?


Quel pilote utilisez-vous? Par exemple, SafaridRiver rejetera automatiquement toutes les alertes car elles ne peuvent pas les gérer.


Avez-vous déjà résolu le problème? J'ai exactement le même problème. Et aucune quantité d'archéologie de Google ne semble aider :)


@Jacobr: Vous pouvez probablement essayer d'ajouter du temps d'attente supplémentaire, car La réponse suggère.


5 Réponses :


8
votes

La cause habituelle de ce problème est que le sélénium est trop rapide et tente d'accepter une alerte qui n'a pas encore été ouverte par le navigateur. Cela peut être simplement fixé par une attente explicite: xxx


0 commentaires

0
votes
public boolean isAlertPresent(){ 
    try{ 
        Alert a = new WebDriverWait(driver, 10).until(ExpectedConditions.alertIsPresent());
        if(a!=null){
            System.out.println("Alert is present");
            driver.switchTo().alert().accept();
            return true;
        }else{
            throw new Throwable();
        }
    } 
    catch (Throwable e) {
        System.err.println("Alert isn't present!!");
        return false; 
    } 

} 
Use explicit wait to check the alert and then do the operation. This might help you. :)

0 commentaires

0
votes

Généralement, cela se produit parce que les commandes de sélénium fonctionnent trop rapidement et essaie de fermer l'alerte avant qu'elle ne soit ouverte. Par conséquent, l'ajout d'un délai après que cliquez sur l'événement devrait résoudre le problème. De plus, si vous utilisez un navigateur Safari pour votre test, il existe un problème avec SafaridRiver dans les alertes de manutention. SafaridRiver ne peut pas gérer les alertes devrait vous fournir plus de détails. < / p>


0 commentaires

1
votes
Step 1:
    public boolean isAlertPresent(){
            boolean foundAlert = false;
            WebDriverWait wait = new WebDriverWait(driver, 0 /*timeout in seconds*/);
            try {
                wait.until(ExpectedConditions.alertIsPresent());
                foundAlert = true;
                System.out.println("isAlertPresent : " +foundAlert);
            } catch (TimeoutException eTO) {
                foundAlert = false;
                System.out.println("isAlertPresent : " +foundAlert);
            }
            return foundAlert;
        }

Step 2:
public boolean tocheck_POP_Dialog()
    {   Alert alert;
        try
        {   
            alert=driver.switchTo().alert();


        }
        catch(NoSuchElementException elementException)
        {   
            return false;
        }

        alert.accept(); //Close Alert popup


        return true;
    }




Step 3 :
if(dummyPage.isAlertPresent())
                {
                    dummyPage.tocheck_POP_Dialog();
                }

3 commentaires

Tandis que cet extrait de code peut résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.


La première fonction renvoie s'il existe une alerte.


2ème fonction clique sur le bouton ALERTE OK



0
votes

Quelques informations supplémentaires. Pour les futurs lecteurs de ce fil:

Si cette exception persiste même une fois que l'aspect attente est adressé, veuillez vérifier si la séquence d'étapes suivante est efficace dans le script de test:

  1. La page de la page HTML sous-jacente est interrogée / analysée à des fins (par exemple, chercher des erreurs de formulaire)

  2. (avant le) pilote.switch_to.alert est tenté

    Lorsqu'une alerte est affichée sur une page HTML, si l'alerte est négligée et que le DOM sous-jacent à la page HTML est interrogé d'abord, le webDriver apparaît pour perdre une trace de l'alerte et provoque l'exception.

    Ceci a été observé avec: GeckoRiver 0.21.0, Firefox 66.0b10 (64 bits); PHARNON 3.6.1 Pilote de sélénium 3.14 (pour Python).

    effectuer (2) avant (1) a été trouvé pour résoudre le problème.


0 commentaires