Я пытаюсь написать тест Selenium для веб-страницы, которая использует событие onbeforeunload, чтобы запросить пользователя перед уходом. Selenium, похоже, не распознает диалоговое окно подтверждения, которое появляется, или не предоставляет способ нажать OK или Cancel. Есть какой-либо способ сделать это? Я использую драйвер Java Selenium, если это уместно.




Предупреждение: это дает альтернативное решение
Watij - http://watij.com/ - может здесь помочь. Или, если вам нравится рубин, ватир может помочь - http://wtr.rubyforge.org/install.html
Вы можете написать расширение пользователя (или просто какой-то JavaScript в storeEval и т. д.), Которое проверяет, что установлено window.onbeforeunload, а затем заменяет его на null, прежде чем продолжить со страницы. Уродливо, но должно убрать вас со страницы.
это был просто вопрос добавления js_eval "window.onbeforeunload=null" перед открытием для меня. (selenium-client на Ruby, но вы сможете легко переводить на другие языки)
Когда я столкнулся с ограниченным контролем над браузером с использованием Selenium, я обратился к плагину MozLab, который решил мою проблему хотя бы для одной платформы браузера.
Мне просто пришлось сделать это для моего приложения, в котором обработчик onbeforeunload выводит запрос, если пользователь покидает страницу, когда документ находится в несохраненном состоянии. Код Python:
driver.switch_to.alert.accept()
Эквивалент в Java:
driver.switchTo().alert().accept();
Если предупреждение не существует, приведенный выше код завершится ошибкой с NoAlertPresentException, поэтому нет необходимости в отдельном тесте для проверки существования перед принятием приглашения.
Я использую Selenium 2.43.0, но я думаю, что уже какое-то время это возможно.
В тех случаях, когда я не хочу, чтобы подсказка появлялась вообще, потому что это не то, что я тестирую, я запускаю собственный JavaScript в браузере, чтобы установить window.onbeforeunload на null перед тем, как покинуть страницу. Я поместил это в тестовый код разборки.
Я не стал этим заниматься (мои требования изменились так, что мне в любом случае было бы лучше использовать обычное оповещение), но похоже, что это сработает, и он близок к тому, как Selenium обрабатывает тестирование для других оповещений.