Erreur Webdriver: "Aucune alerte n'est présente" après le lancement de UnexpectedAlertPresentException
Je suis en train de tester une application web que je suis en développement. J'utilise Firefox pilote contre Firefox 22.0.
À un point, une boîte de dialogue modale peut pop-up (un Javascript prompt()). Si c'est le cas, je veux entrez du texte, puis de le rejeter (cliquez sur OK).
Voici le code correspondant:
try:
if button.text == "Run":
button.click()
except UnexpectedAlertPresentException:
alert = self.driver.switch_to_alert()
print alert.text
alert.send_keys('8080')
alert.dismiss()
La UnexpectedAlertPresentException
est être jeté. Cependant, dès qu'il essaie d'exécuter print alert.text
j'obtiens:
`NoAlertPresentException: Message: u'No alert is present'`.
Si je supprime l'instruction print, elle explose au alert.send_keys
avec:
`WebDriverException: Message: u'fxdriver.modals.find_(...) is null'`
Je ne l'obtenez pas. N'est-ce pas le NoAlertPresentException
par définition, de contredire le UnexpectedAlertPresentException
qui a été jeté et a causé l'exception du bloc exécuté en premier lieu?
Edit: Aussi, je ne peux pas pour la vie de me trouver toute la documentation sur le UnexpectedAlertPresentException
dans http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation
Edit 2: c'est Ce que j'ai maintenant:
try:
if button.text == "Run":
button.click()
alert = self.driver.switch_to_alert()
alert.send_keys('1111')
alert.dismiss()
except NoAlertPresentException:
pass
Cependant, je suis toujours de voir ce:
WebDriverException: Message: u'fxdriver.modals.find_(...) is null'
sur la ligne alert.send_keys('8080')
. Je suppose que je ne comprends pas pourquoi switch_to_alert()
ne jette pas NoAlertPresent
si il n'y a pas un système d'alerte...qui est ce que je suis en supposant que le WebDriverException
indique.
source d'informationauteur Isaac Dontje Lindell
Vous devez vous connecter pour publier un commentaire.
Je pense que le Sélénium ferme inattendue des alertes. Apparemment, vous pouvez changer la façon dont firefox pilote traite inattendu alertes:
Comment gérer une Alerte "UnexpectedAlertBehaviour" dans le Sélénium?
Comme alternative, vous pouvez vérifier si il y a une alerte avant d'agir (après tout, si vous voulez gérer l'alerte, il n'est pas inattendu) comme (Java):
J'ai peut-être pas le meilleur programmeur python, parce que j'ai commencé avec elle il y a 1 semaine.
J'ai gérer moi-même pour créer une petite fonction qui accepte AUCUNE alerte, et le fera plus d'alertes.
Chaging le SI pour TOUT en ligne de -2 (deuxième à partir de la queue) on peut gérer aussi consécutives confirmations/alertes.
L'aide SI vous pouvez gérer les réponses de confirmer()
À l'aide ALORS que vous pouvez gérer toutes les alertes().
Si l'alerte est sous un délai d'attente, vous devez essayer de "contourner" le alert() sur le bon moment.
J'ai réussi à ajouter 2 gestionnaires d'exception, pour contourner anonyme alertes() et aussi de l'arrêter lorsqu'aucune alert() est présent.
Tu ne peux pas le tester avec n'importe quel site web. J'ai faire un html avec quelques différentes alertes à digg un peu sur ça.
Code HTML:
En fait, le TOUT en ni le SI les poignées de la pleine page, j'imagine, parce que le délai d'attente. Si vous mettez tous à ignorer qu'il fait.
Im assez sûr que cela peut être fait en utilisant implicite attend et les conditions attendues avec un code plus court. Si vous prenez un coup d'oeil de la source de alert_is_present vous se rien que d'essayer:bloc avec return true/false.
Pour mon cas, j'ai besoin de cliquer sur le bouton de Téléchargement de sans sélectionner le Fichier et vérifier qu'un message d'alerte est de venir ou pas.
Mais dans mon cas, en cliquant sur le bouton de Téléchargement ci-dessous exception est à venir
le sélénium.commun.des exceptions.UnexpectedAlertPresentException: Texte De L'Alarme:
Message: boîte de dialogue Modale actuelle
Dans mon cas d'alerte.accepter ou d'alerte.rejeter n'est pas de travail
Donc, je n'ai appuyer sur Tab et sélectionnez le bouton Télécharger et Appuyez sur la Touche Entrée par le biais de Code Python. Son travail parfait.