Question Le script Selenium / WebDriver est interrompu par une alerte - exception "Message: u'Modal Dialogue present '"


Je suis relativement nouveau sur Python / JS et j'ai également automatisé les tests avec Selenium / WebDriver, mais j'ai fait des progrès!

Maintenant, je suis coincé à un moment et c'est vraiment frustrant.

Le site que je teste vend des produits. J'ai réussi à faire naviguer mon script de manière aléatoire et à accéder à la page de paiement, à remplir des données factices, à soumettre des données en utilisant:

browser.execute_script("document.Form.submit(); return true;")
browser.execute_script("processPayment(); return true;")

Habituellement, il y a un bouton Payer maintenant et cliquer sur cet élément entraîne la même exception et il n'y avait aucun moyen de cliquer sur OK / Annuler via WebDriver (pas de WebElement), mais j'ai compris que l'exécution de ce code JS passé le Ma nouvelle page chargée (après avoir envoyé des données et en avoir confirmé la publication) avec une confirmation et toutes les données correctes, mais le script Python est interrompu et je ne peux pas continuer le test.

Y a-t-il une solution pour cela? Ce que je veux qu’il fasse, c’est d’ignorer cette boîte de dialogue modale, d’attendre le chargement de la prochaine page de confirmation, puis de continuer à localiser les éléments, d’imprimer leurs valeurs, de les stocker, etc.

Essayé en utilisant:

wait = ui.WebDriverWait(browser,10)
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt'))
print(browser.title)

mais le script est interrompu. Désolé si cela a été répondu, mais je ne pouvais pas le trouver, et aussi je suis un débutant!

Merci d'avance!

MODIFIER:

L'a fait! Dans mon cas, qu'est-ce qui a fonctionné, je viens de modifier un peu mon code

browser.execute_script("document.roomBookingForm.submit(); return true;")
alert = browser.switch_to_alert()
alert.dismiss()
browser.execute_script("processPayment(); return true;")

Notez pour les débutants que vous devrez importer Alert.

from selenium.webdriver.common.alert import Alert

11
2018-06-04 07:44


origine


Réponses:


Notez pour les débutants (comme moi) que vous devrez importer Alert.

from selenium.webdriver.common.alert import Alert

... ... ... (code placeholder)

browser.execute_script("document.roomBookingForm.submit(); return true;")
alert = browser.switch_to_alert()
alert.dismiss()
browser.execute_script("processPayment(); return true;")

vient d'ajouter le gestionnaire d'alertes


8
2018-06-05 00:39