37 votes

Selenium WebDriver : comment fermer les fenêtres pop-up du navigateur ?

Je suis en train d'écrire des tests pour une application web en utilisant Selenium WebDriver et je suis tombé sur un scénario où lorsque j'essaie de fermer le navigateur, j'obtiens une popup disant "Are you sure ? La page vous demande de confirmer que vous voulez quitter - les données saisies seront perdues" avec 2 boutons : Quitter la page et Rester sur la page

Comment puis-je cliquer sur ces boutons ?

25voto

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

a résolu le problème pour moi

1 votes

Connaissez-vous une solution pour ruby on rails ?

2 votes

Cela ne fait que supprimer la liaison de la fenêtre pop-up, sans cliquer sur un bouton.

1 votes

Cela ne fonctionne que si le code de la page utilise window.onbeforeunload = ... . Cela ne fonctionne pas si la page utilise window.addEventListener('beforeunload', ...) .

18voto

Brian121212 Points 133
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

11voto

Tim Büthe Points 21527

Vous pouvez interagir avec les alertes et autres en utilisant la fonction API d'alerte . En passant à l'alerte et en la confirmant, cela ressemblerait à ceci (en Java) :

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

Ceci est également expliqué dans le FAQ sur le sélénium .

6voto

Rangarao Points 71
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])

0 votes

Est-ce que cela vise à fermer les fenêtres popup du navigateur, plutôt que de rejeter les alertes javascript ? parce que cela ne fonctionne pas pour ces dernières...

1voto

Tahir Shabbir Points 42

Je ne suis pas sûr de la structure de la popup que vous avez utilisée. Voici quelques exemples qui pourraient vous convenir si vous avez utilisé l'une ou l'autre de ces fenêtres pop-up.

Si c'est une alerte, vous pouvez essayer :

driver.SwitchTo().Alert()

Si c'est une fenêtre qui s'ouvre alors :

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

Pour iFrame :

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

Une fois que vous avez franchi l'une de ces trois étapes, vous pouvez accéder à tous ses éléments internes.

Salutations Tahir

0 votes

Comment revenir à la fenêtre d'origine à partir d'Alerte/Fenêtre/Cadre ?

0 votes

Compte tenu du texte présenté par le PO, le popup est probablement une alerte.

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