Здравствуйте, я начал практиковать автоматизацию совсем недавно, использую Selenium Webdriver+Juint4, у меня есть пару десятков простых тестов (логин, проверка элементов, кнопок и т. д.).
Суть вот в чем: Посреди выполнения теста(на любом шаге) может появится попап который делает страницу бэкграундом, что бы продолжить работу с сайтом нужно закрыть попап(кнопка присутствует). Как на Java реализовать исключение, которое при появлении попапа , будет его закрывать(ну или нажимать какие то элементы на нем)?
Если попапом является обычный алерт, то решение можно почитать тут. Если это что-то специфическое / браузерное, то либо при помощи Robot класса, либо Sikuli. Если попап является частью вашего сайта, то обрабатывайте его так же, как и любую другую страницу.
Я бы рекомендовал не бросаться решать эту задачу в лоб. Использование всевозможных библиотек (Robot, AutoIT и пр) лишь усложнит тесты и ацки затруднит поддержку.
Лучше разберитесь всё-таки, при каких условиях этот попап может выскакивать, и контролируйте.
Сделайте отдельный тест, в котором этот попап выскакивает, и тест его закрывает. А в остальных тестах чтобы этот попап никогда не выскакивал. Это было бы более надёжное и грамотное решение.
Мне кажется, что попап все-таки не случайный. Поэтому я согласен asolntsev, что необходимо изучить условия появления попап. Ну, и может сделать какой-то метод, который будет данное событие обрабатывать.
А просто условием в начале нельзя прописать? При возникновении на экране кнопки закрытия (у попапа же она есть) жать эту кнопку. Вопрос в том, отличная ли эта кнопка от стандартной кнопки закрытия окна...
Попап является частью страницы и появляется в том же окне в котором работает вебдрайвер, затемняя немного сайт. Появление попапов прописано в яваскрипте.
Дело в том что на сайте есть много различных попапов, например, один может появится после 5 обновлений страницы(активности на сайте), другой через 10 , третий после нажатия на определенную кнопку N количество раз.
Может можно как то отключать определенные скрипты на странице при выполнении тестов, или сразу их вызывать для выполнения действий над ними?
Еще есть проблема: некоторые тесты всеравно продолжает выполнятся ,после появления попапа, так как видят элементы страницы, но реальных кликов тест не производит.
Как правильно написать условие что бы проверяло перед каждым шагом теста на наличие кнопки "close" или любого другого элемента попапа? Писать If перед каждым шагом теста совсем не вариант, или я что то не так понял?
М, по-моему достаточно написать if перед всеми тестами, т.е. буквально после всех объявлений переменных и чего там еще (, в деле не пробовала, но были обсуждения этого момента (у нас были автопопапы, но вопрос снялся сам собой - они появляются только после простоя, а при выполнении тестов какой простой?) . Во всяком случае, можно пропбовать вписать перед всем блоком тестов и глянуть что будет
Отключить можно. Самый простой способ - javascriptexecutor'ом удалить элемент попапа.
Ну и можно хитро сделать - при появлении попапа реально обработать это дело эксепшнами. Только хорошенько продумав.
ну и контроль этого дела, как писалось выше - самое верное решение. Отключение - это все же вносит ссвою лепту в функционал, ранее задуманный именно таким образом.