web-dev-qa-db-fra.com

Selenium WebDriver comment fermer le navigateur

J'écris des tests pour une application Web à l'aide de Selenium webDriver. Je suis tombé sur un scénario dans lequel, lorsque j'essaie de fermer le navigateur, une fenêtre contextuelle s'affiche pour indiquer "Êtes-vous sûr? La page vous demande de confirmer que vous souhaitez partir - les données saisies entreront être perdu." avec 2 boutons: quitter la page et rester sur la page

Comment puis-je cliquer sur ces boutons?

35
Maalamaal
 ( ( JavascriptExecutor ) _driver )
            .executeScript( "window.onbeforeunload = function(e){};" );

résolu le problème pour moi

24
Maalamaal
IAlert alert = driver.SwitchTo().Alert();

alert.Accept(); //for two buttons, choose the affirmative one
// or
alert.Dismiss(); //to cancel the affirmative decision, i.e., pop up will be dismissed and no action will take place
16
Brian121212

Vous pouvez interagir avec des alertes et autres à l'aide de l'API Alert . Basculer sur l'alerte et confirmer qu'elle ressemblerait à ceci (en Java):

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

Ceci est également expliqué dans Selenium FAQ .

11
Tim Büthe
def close_all_popups(driver):
    driver.window_handles
    for h in driver.window_handles[1:]:
        driver.switch_to_window(h)
        driver.close()
    driver.switch_to_window(driver.window_handles[0])
6
Rangarao

Vous ne savez pas quelle est la structure de la fenêtre contextuelle que vous avez utilisée ... Voici quelques-unes de ces méthodes qui pourraient vous convenir si vous avez utilisé l'une ou l'autre de ces fenêtres.

Si c'est une alerte. tu peux essayer:

driver.SwitchTo().Alert()

Si c'est une fenêtre qui apparaît alors:

driver.SwitchTo().Window(<windowname>)

Pour iFrame:

driver.SwitchTo().Frame("iFrmLinks")

Une fois que vous avez traversé l’un des trois, vous pouvez accéder à tous ses éléments internes.

Cordialement Tahir

1
Tahir Shabbir

Vous devez gérer les alertes inattendues à l'aide de try catch blocks. Mettez votre code dans le bloc try et attrapez la 'UnhandledAlertException' 

Exemple:

try{
     .....
     .....
     code here
}catch(UnhandledAlertException e ){
    driver.switchto().alert().dismiss();
}
0
RamaKrishna

Vous pouvez essayer d’utiliser des événements de clavier. Donc, une fois la fenêtre ouverte:

Tab sur le bouton "Ok".

driver.Keyboard.PressKey(Keys.Tab);

Vous devrez jouer pour voir combien de pressions de tabulation sont nécessaires.

Puis frappe l'espace.

driver.Keyboard.PressKey(Keys.Space);

Oui, c'est un peu un bidouillage, mais WebDriver est encore assez immature.

EDIT: Cela fonctionnera pour les "vrais" popups, mais comme un autre répondant l'a dit, peut-être pas pour les choses étranges dans la page. En gros, si vous pouvez appuyer manuellement sur le bouton de fermeture, cette méthode devrait fonctionner.

0
ACK_stoverflow

J'ai le même problème quand j'ai le formulaire de champs et le bouton "Terminer l'édition", parce que quand Selenium IDE clique automatiquement sur la fonction javascript, le responsable est de désactiver la fenêtre de confirmation (laisser la page ou toujours dessus) ), cela ne prend pas un événement de souris "mouseup" qui signifie que window.confirm fonctionne toujours et que le test de passage automatique a échoué. Ma solution est de surcharger la fonction javascript window.onbeforeunload dans ce cas (inutile de demander si nous savons ce que nous faisons lorsque nous enregistrons un test dans Selenium IDE). Vous pouvez exécuter le script de substitution dans Selnium IDE avant de cliquer sur le bouton "Enregistrer" (ou quelque chose du genre suivant) à travers Selenium.runScript -. Cela devrait simplement désactiver la fenêtre de confirmation.

    Command: runScript
    Target: {window.onbeforeunload=function(e){};}
0
Alex