Ошибка Webdriver: «Отсутствует предупреждение» после того, как UnexpectedAlertPresentException выбрано

Я пытаюсь проверить webapp, который я разрабатываю. Я использую драйвер Firefox против Firefox 22.0.

В какой-то момент может появиться модальный диалог (подсказка Javascript ()). Если это так, я хочу ввести какой-то текст и затем отпустить его (нажмите «ОК»).

Вот соответствующий код:

try: if button.text == "Run": button.click() except UnexpectedAlertPresentException: alert = self.driver.switch_to_alert() print alert.text alert.send_keys('8080') alert.dismiss() 

UnexpectedAlertPresentException . Однако, как только он пытается выполнить print alert.text , я получаю:

 `NoAlertPresentException: Message: u'No alert is present'`. 

Если я удалю оператор печати, он alert.send_keys в alert.send_keys с помощью:

 `WebDriverException: Message: u'fxdriver.modals.find_(...) is null'` 

Я не понимаю. Разве NoAlertPresentException по определению не противоречит исключению UnexpectedAlertPresentException которое было вызвано тем, что NoAlertPresentException блок был выполнен в первую очередь?

Изменить: Кроме того, я не могу на всю жизнь найти документацию об UnexpectedAlertPresentException в http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html#documentation

Изменить 2: Это то, что у меня есть сейчас:

 try: if button.text == "Run": button.click() alert = self.driver.switch_to_alert() alert.send_keys('1111') alert.dismiss() except NoAlertPresentException: pass 

Тем не менее, я все еще вижу это:

 WebDriverException: Message: u'fxdriver.modals.find_(...) is null' 

в строке alert.send_keys('8080') . Наверное, я не понимаю, почему switch_to_alert() не выбрасывает NoAlertPresent если нет предупреждения … это то, что я предполагаю, что указывает WebDriverException .

3 Solutions collect form web for “Ошибка Webdriver: «Отсутствует предупреждение» после того, как UnexpectedAlertPresentException выбрано”

Я думаю, что Selenium закрывает неожиданные предупреждения. Видимо, вы можете изменить способ использования драйвера firefox для неожиданных предупреждений: как обрабатывать оповещение с возможностью «UnexpectedAlertBehaviour» в Selenium?

В качестве альтернативы вы можете проверить, есть ли предупреждение перед тем, как действовать (в конце концов, если вы хотите обработать предупреждение, это не неожиданно), как это (Java):

 try { Alert alert = _driver.switchTo().alert(); //do stuff with alert } catch (final NoAlertPresentException e) { //do non-alert stuff } 

Возможно, я не лучший программист на python, потому что я начал с него неделю назад. Я сам создал небольшую функцию, которая будет принимать ЛЮБОЕ предупреждение, а также будет делать больше предупреждений.

Выбирая IF для WHILE в строке -2 (второй из хвоста), мы можем обрабатывать также последовательные подтверждения / предупреждения. Используя IF, вы можете обрабатывать ответы подтверждения () Используя WHILE, вы можете обрабатывать все предупреждения (). Если предупреждение находится под таймаутом, вам нужно попробовать «обходить» предупреждение () в нужный момент.

Мне удалось добавить 2 обработчика исключений, обходить uknown warn (), а также остановиться, когда не присутствует alert ().

 import selenium from selenium import webdriver import os import time from selenium.common.exceptions import UnexpectedAlertPresentException from selenium.common.exceptions import NoAlertPresentException os.system("pkill php") os.system("php -S localhost:2222 alert.html &") fire = webdriver.Firefox() fire.get("http://localhost:2222") global alert def alert_accept(): try: alert = fire.switch_to_alert() print "Aler text:" + alert.text alert.accept() print "Alert detected, accept it" return True except UnexpectedAlertPresentException: print "Hum..., continue?" return False except NoAlertPresentException: print "No alert here" return False while alert_accept() == True: alert_accept() 

Вы не можете проверить его на любом веб-сайте. Я сделал локальный html с некоторыми различными предупреждениями, чтобы немного подружиться.

Код HTML:

 <script type="text/javascript"> var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } </script> <script type="text/javascript"> var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } </script> <script type="text/javascript"> console.log("Running test with timeout") </script> <script type="text/javascript"> setTimeout(function(){ var c = confirm("Do you like kidding yourself?") if (c == true) { alert("true") } else { alert("You're the kidding master, another alert!") } }, 5000) </script> 

Фактически, WHILE или IF обрабатывает полную страницу, я думаю, потому что тайм-аут. Если вы поместите все в onces, это произойдет.

Я уверен, что это можно сделать, используя неявные ожидания и ожидаемые условия с коротким кодом. Если вы посмотрите на источник alert_is_present, вы получите не что иное, как попытку: block with return true / false.

Для моего случая мне нужно нажать кнопку «Загрузить», не выбрав «Файл», и проверить, появилось ли предупреждающее сообщение или нет. Но в моем случае, нажав кнопку «Загрузить», появляется следующее исключение: selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: Message: Модальный диалог присутствует. В моем случае alert.accept или alert.dismiss не работает. Итак, я сделал, чтобы нажать Tab и выберите кнопку «Загрузить» и нажмите клавишу ввода через код Python. Его работа прекрасна.

  • Реализация WebdriverBackedSelenium в Python
  • Чтобы отправить три клавиши с помощью send_keys () в selenium python webdriver
  • сафари-драйвер selenium selenium
  • Как установить прокси-серверы вроде этого «user: pass@6.6.6.6: 8043» в FirefoxDriver of Selenium 2?
  • Как возобновить сеанс браузера или использовать существующее окно браузера с Selenium-Python?
  • Как избежать получения объекта `'NoneType' не имеет атрибута 'path'` на selenium quit ()?
  • Firefox + Selenium WebDriver и автоматически загружайте файл csv
  • Найти xth td с td содержит в одном и том же tr xpath python
  • Python - лучший язык программирования в мире.