Сценарий Selenium / WebDriver прерывается предупреждением - сообщение об исключении: u'Modal dialog присутствует'

Я новичок в Python/JS, а также в автоматическом тестировании с помощью Selenium/WebDriver, но я добился определенного прогресса!

Теперь я застрял в одной точке, и это действительно расстраивает.

Веб-сайт, который я тестирую, продает товары. Мне удалось заставить мой скрипт перемещаться случайным образом и переходить на страницу оплаты, заполнять фиктивные данные, отправлять данные, используя:

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

Обычно есть кнопка «Оплатить сейчас», и щелчок по этому элементу приводит к тому же исключению, и у меня не было возможности нажать «ОК» или «Отмена» через WebDriver (без WebElement), но я понял, что выполняя этот код JS, я могу получить мимо него. Моя недавно загруженная страница (после отправки данных и подтверждения их публикации) с подтверждением и всеми правильными данными загружается, но скрипт Python прерывается, и я не могу продолжить тест.

Есть ли обходной путь для этого? Что я хочу сделать, так это игнорировать этот модальный диалог, дождаться загрузки следующей страницы подтверждения, а затем продолжить поиск элементов, распечатать их значения, сохранить их и т. д.

Пробовал использовать:

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

но сценарий прерывается. Извините, если на этот вопрос был ответ, но я не смог его найти, а также я новичок!

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Сделал это! В моем случае сработало то, что я просто немного изменил свой код.

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

Обратите внимание для новичков, что вам нужно будет импортировать Alert.

from selenium.webdriver.common.alert import Alert

person tsaulic    schedule 04.06.2012    source источник


Ответы (1)


Примечание для новичков (таких как я), что вам нужно будет импортировать 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;")

только что добавил обработчик предупреждений

person tsaulic    schedule 05.06.2012
comment
Конечно, обратите внимание, что alert.dismiss() нажимает кнопку отмены; используйте alert.accept(), чтобы нажать OK. - person Racing Tadpole; 23.10.2013
comment
а браузер в ответе - экземпляр webdriver. - person Sinux; 10.11.2015
comment
для всплывающих окон входа используйте alert.send_keys(u"user{}pass".format(Keys.TAB)) перед использованием alert.accept(). По-видимому, это нужно сделать селену, ранее кто-то использовал win32com.client для ввода информации для входа. Это работает в зависимости от пользовательского браузера, но Selenium выдает ошибку Modal dialog present для любых вызовов find_element до тех пор, пока оповещение не будет обработано селеном. Источник ошибки на GitHub ‹github.com/seleniumhq/selenium- google-code-issue-archive/issues/ - person Brian W; 07.03.2019