Тестирование перед загрузкой событий из Selenium
-
03-07-2019 - |
Вопрос
Я пытаюсь написать тест Selenium для веб-страницы, которая использует событие onbeforeunload, чтобы запросить у пользователя перед уходом. Кажется, что Selenium не распознает всплывающее диалоговое окно подтверждения или способ нажатия кнопки «ОК» или «Отмена». Есть какой-либо способ сделать это? Я использую драйвер Java Selenium, если это уместно.
Решение
Вы можете написать пользовательское расширение (или просто некоторый JavaScript в storeEval и т. д.), которое проверяет, установлен ли window.onbeforeunload, а затем заменяет его на null, прежде чем продолжить со страницы. Ужасно, но вытащить тебя со страницы.
Другие советы
Я только что сделал это для моего приложения, где обработчик onbeforeunload
вызывает приглашение, если пользователь покидает страницу, когда документ находится в несохраненном состоянии. Код Python:
driver.switch_to.alert.accept()
Java-эквивалент будет таким:
driver.switchTo().alert().accept();
Если предупреждение не существует, приведенный выше код завершится ошибкой с NoAlertPresentException
, поэтому нет необходимости в отдельном тесте для проверки существования перед принятием приглашения.
Я использую Selenium 2.43.0, но я думаю, что это уже давно выполнимо.
В тех случаях, когда я не хочу, чтобы приглашение появлялось вообще, потому что это не то, что я тестирую, я запускаю собственный JavaScript в браузере, чтобы установить для window.onbeforeunload
значение null
перед тем, как покинуть страницу. Я поместил это в тестовый код.
Предупреждение: это дает альтернативное решение
Watij - http://watij.com/ - может помочь здесь. Или, если вы знакомы с ruby, watir может помочь - http://wtr.rubyforge.org/ install.html р>
Когда я столкнулся с ограниченным контролем над браузером с помощью Selenium, я повернулся к MozLab плагин, который решил мою проблему хотя бы для одной платформы браузера.