web-dev-qa-db-fra.com

Cliquez sur le bouton OK à l'intérieur d'une alerte (Selenium IDE)

Je dois cliquer sur le bouton "Ok" dans une fenêtre d'alerte avec la commande Selenium . J'ai essayé assertAlert ou verifyAlert mais ils ne font pas ce que je veux.

C'est possible le clic sur le bouton 'Ok'? Si tel est le cas, quelqu'un peut-il me fournir un exemple de la commande Selenium IDE?

63
Bruno

Essayez Selenium 2.0b1. Il a un noyau différent de celui de la première version. Il devrait supporter les dialogues popup selon documentation :

Dialogues Popup

À partir de Selenium 2.0 beta 1, la gestion des boîtes de dialogue contextuelles est intégrée. Une fois que vous avez déclenché une action susceptible d'ouvrir une fenêtre contextuelle, vous pouvez accéder à l'alerte avec les éléments suivants:

Java

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

Ruby

driver.switch_to.alert

Cela retournera l'objet d'alerte actuellement ouvert. Avec cet objet, vous pouvez maintenant accepter, rejeter, lire son contenu ou même taper dans une invite. Cette interface fonctionne aussi bien sur les alertes, les confirmations que les invites. Reportez-vous à la JavaDocs pour plus d'informations.

48
amra

Pour cliquer sur le bouton "ok" dans un message d’alerte: 

driver.switchTo().alert().accept();
39
Sakthi

C'est une réponse de 2012, la question de 2009, mais les gens la regardent encore et il n'y a qu'une réponse correcte (utilisez WebDriver) et une réponse presque utile (mais pas assez).


Si vous utilisez Selenium RC et que vous pouvez réellement voir une boîte de dialogue d'alerte, cela ne peut être fait. Le sélénium devrait le gérer pour vous. Mais, comme indiqué dans la documentation de Selenium :

Selenium essaie de vous cacher ces dialogues (en remplaçant window.alert, window.confirm et window.Prompt) afin qu'ils n'arrêtent pas l'exécution de votre page. Si une alerte s’affiche, c’est probablement parce qu’elle s’est déclenchée pendant le processus de chargement de la page, ce qui est généralement trop tôt pour que nous puissions protéger la page.

C'est une limitation connue de Selenium RC (et donc de Selenium IDE également) et l'une des raisons pour lesquelles Selenium 2 (WebDriver) a été développé. Si vous souhaitez gérer les alertes onload JS, vous devez tiliser WebDrivergestion des alertes.

Cela dit, vous pouvez utiliser Robot ou Selenium.keyPressNative() pour saisir du texte, puis appuyez sur Enter et confirmez le dialogue à l’aveugle. Ce n'est pas la façon la plus propre, mais ça pourrait marcher. Cependant, vous ne pourrez pas obtenir le message alert.

Robot a toutes les clés utiles mappées sur les constantes, ce sera donc facile. Avec keyPressNative(), vous souhaitez utiliser 10 comme valeur pour appuyer sur Enter ou 27 pour Esc puisque cela fonctionne avec codes ASCII .

10
Petr Janeček

1 | Imprimer le texte contextuel de l'alerte et fermer -I

Alert alert = driver.switchTo().alert();
System.out.println(closeAlertAndGetItsText());

2 | Imprimer le texte contextuel de l'alerte et fermer -II

Alert alert = driver.switchTo().alert();
System.out.println(alert.getText()); //Print Alert popup
alert.accept(); //Close Alert popup

3 | Assert Alert popup text and close

Alert alert = driver.switchTo().alert();
assertEquals("Expected Value", closeAlertAndGetItsText());
4
Prashanth Sams

Si vous utilisez Selenium IDE, vous devez cliquer sur le bouton Ok manuellement, car lorsque la commande de message d'alerte est exécutée, le navigateur cesse de fonctionner et si vous souhaitez cliquer sur le bouton ok automatiquement, vous devez utiliser Selenium RC ou webdriver et la commande ci-dessous est pour Selenium IDE

Dans Selenium ide, utilisez la commande storeeval, type de boîte différent

    storeEval | alert("This is alert box")                           |
    storeEval | Prompt("This is Prompt box. Please enter the value") | text
    storeEval | confirm("this is cofirm box")   |
4
Ankit jain

Vous pourriez regarder dans chooseOkOnNextConfirmation , bien que ce soit probablement le comportement par défaut si je lis correctement la documentation.

2
Hank Gay

La question n'est pas claire - s'agit-il d'une alerte au chargement de la page? Lors de l’utilisation de Selenium, vous ne devriez voir aucun dialogue d’alerte, car il remplace alert() par sa propre version, qui capture simplement le message donné à des fins de vérification.

Selenium ne prend pas en charge alert() au chargement de la page, car il doit corriger la fonction dans la fenêtre testée avec sa propre version.

Si vous ne parvenez pas à vous débarrasser des alertes de chargement de l'application testée, vous devez envisager d'utiliser l'automatisation de l'interface graphique pour cliquer sur les fenêtres contextuelles générées, par exemple. AutoIT si vous êtes sous Windows.

2
Jonny Buchanan

Utilisez l'interface d'alerte, d'abord switchTo() pour alerter, puis utilisez accept() pour cliquer sur OK ou utilisez dismiss() pour ANNULER.

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

ou 

Alert alert_box = driver.switchTo().alert();
alert_box.dismiss(); 
1
iamsankalp89

Le nouveau Selenium IDE (publié en 2019) dispose d'une API beaucoup plus large et d'une nouvelle documentation.

Je crois que c'est la commande que vous voudrez essayer:

webdriver choisissez ok lors de la confirmation visible

Décrit à:

https://www.seleniumhq.org/Selenium-ide/docs/en/api/commands/#webdriver-choose-ok-on-visible-confirmation

Il existe d'autres appels d'API liés aux alertes; il suffit de rechercher cette page pour alert

0
Al Sargent

Ceci est Pythoncode
Problème avec les alertes

Une option qui a fonctionné pour moi est:

while True:
    try:
        driver.find_element_by_xpath('//div[@class="sweet-alert showSweetAlert visible"]')
        break
    except:
        wait = WebDriverWait(driver, 1000)

confirm_button = driver.find_element_by_xpath('//button[@class="confirm"]')
confirm_button.click()
0
mrk

Utilisez choiceOkOnNextConfirmation () pour ignorer l'alerte et getAlert () pour vérifier qu'elle a bien été affichée (et éventuellement pour extraire son texte à des fins de vérification).

Selenium.chooseOkOnNextConfirmation();  // prepares Selenium to handle next alert
Selenium.click(locator);
String alertText = Selenium.getAlert(); // verifies that alert was shown
assertEquals("This is a popup window", alertText);
...
0
Alex

assertAlert doit faire l'affaire. Je vois dans la documentation que les alertes générées dans le gestionnaire d'événements OnLoad d'une page ne peuvent pas être scriptées de cette façon (et l'ont expérimenté moi-même, hélas, en raison du cycle de vie d'une page ASP.NET). Cela pourrait-il être ce que vous rencontrez?

0
BenetD

Pour Selenium, une alerte est celle qui a été déclenchée à l’aide de javascript, par exemple.

 javascript:alert();

Il existe une vérification de base permettant de vérifier si votre alerte est en fait une alerte javascript ou simplement une zone basée sur une division permettant d'afficher un message. Si c'est une alerte javascript, vous ne pourrez pas la voir à l'écran pendant l'exécution du script Selenium.

Si vous pouvez le voir, vous devez obtenir le localisateur du bouton ok de l'alerte et utiliser Selenium.click (localisateur) pour ignorer l'alerte. Peut vous aider mieux si vous pouvez fournir plus de contexte:

  1. IDE ou RC? 
  2. Code HTML de l'alerte
  3. votre script Selenium.

Vamyip

0
vamyip