Асинхронное ожидание появления элемента
#1
Отправлено 30 августа 2013 - 09:38
Существует ли возможность поймать Webdriver'ом момент появления определенного элемента в DOM в любой момент прогона теста? Т.е. как поймать этот элемент в _определенный_ момент - понятно, но можно ли его ловить там, где он не ожидается?
Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error. Надо в этот момент остановить тест, сделать скриншот и логировать текст попапа.
PS: пишу тесты на Java, использую Selenide.
#2
Отправлено 30 августа 2013 - 09:53
Почитайте про аспекты (аспектно-ориентированное программирование).Всем привет.
Существует ли возможность поймать Webdriver'ом момент появления определенного элемента в DOM в любой момент прогона теста? Т.е. как поймать этот элемент в _определенный_ момент - понятно, но можно ли его ловить там, где он не ожидается?
Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error. Надо в этот момент остановить тест, сделать скриншот и логировать текст попапа.
PS: пишу тесты на Java, использую Selenide.
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?
#3
Отправлено 30 августа 2013 - 11:12
Да вот именно, что не хотелось бы лезть в дебри...Почитайте про аспекты (аспектно-ориентированное программирование).
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?
Т.е. готовое и/или простое решение еще не существует?
#4
Отправлено 30 августа 2013 - 12:18
Готовое и простое - сомневаюсь.Да вот именно, что не хотелось бы лезть в дебри...
Почитайте про аспекты (аспектно-ориентированное программирование).
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?
Т.е. готовое и/или простое решение еще не существует?
#5
Отправлено 30 августа 2013 - 13:00
При грамотно написанном тесте/фреймворке, тест сам в этом месте упадет, а фреймворк сделает скриншот и вытянет текст (если он есть). Искать *везде, где можно* то, чего *может нигде и не быть*, чем то напоминает фразу из сказки, и вряд ли может поддаваться тестированию, как мануальному, так и автоматизированному.Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error.
#6
Отправлено 30 августа 2013 - 14:07
Как это сделать на уровне теста - плохо представляю, поэтому и ищу готовый фреймворк.При грамотно написанном тесте/фреймворке, тест сам в этом месте упадет, а фреймворк сделает скриншот и вытянет текст (если он есть).
Ну почему, как раз человек легко такие вещи отлавливает. Речь идет именно о визуальном оповещении.Искать *везде, где можно* то, чего *может нигде и не быть*, чем то напоминает фразу из сказки, и вряд ли может поддаваться тестированию, как мануальному, так и автоматизированному.
#7
Отправлено 30 августа 2013 - 15:40
Я тоже, так как описание проблемы довольно абстрактно. А моем понимании, если есть запрос - ему предшествует определенное действие, а если есть действие, есть ожидаемый результат, которого не будет в случае фейла запроса=>тест падает=>тригается листенер, например TestNG => делается скриншот, проверяется наличие сообщения об ошибке и так далее.Как это сделать на уровне теста - плохо представляю, поэтому и ищу готовый фреймворк.
Не все поддается автоматизации, некоторые вещи стоит оставить на стороне мануального тестирования.Ну почему, как раз человек легко такие вещи отлавливает. Речь идет именно о визуальном оповещении.
#8
Отправлено 27 сентября 2013 - 11:55
Во время прохода теста появление сообщений вроде "сервис недоступен" или 'в настоящий момент система.....' или стандартных ошибок 500 итд ведет к дальнейшему падению теста, без вменяемого лога.
вылез из ситуации написанием своего рода "демона" который парсит страницу на предмет появления span и div в которых innertext содержит сообщения из списка + остальные элементы разметки с ожидаемым текстом + ожидание win окошек по тексту заголовка ( это если падение совсем уж неожиданное). откомпилирован в exe
в начале основного теста я запускаю его с сохранение его PID
оба процесса общаются через INI файл. просто передавая некоторые флаги и переменные друг в друга ( например номер теста, который проводиться и главные тестовые данные)
если на странице происходит неожиданное исключение и тест падает, демон запоминает номер теста и входные данные в лог + делает скриншот экрана. и закрывается с возвращением exitcode отличным от нуля. Консоль из которой я запускаю серию тестов, пишет что конкретный тест фейл, (даные в лог уже положены демоном) и приступает к следующему.
Если тест удачно завершился, то демон убивается по его pid, чтобы дальше не мешал и не плодился.
#9
Отправлено 30 сентября 2013 - 09:31
Спасибо за ответ.вылез из ситуации написанием своего рода "демона"...
Сам такое, к сожалению, пока не осилю, но может удастся уломать дев тим подсобить.
#10
Отправлено 30 сентября 2013 - 10:19
Хотите искать *всегда и везде* и не смущает, что время выполнения тестов увеличится в разы - http://selenium.goog...ntListener.html
#11
Отправлено 30 сентября 2013 - 12:51
Не додумываю за топикстартера, но предполагаю, что onTestFailure ему не подойдёт.Не понимаю, чем вас onTestFailure не устраивает?
Хотите искать *всегда и везде* и не смущает, что время выполнения тестов увеличится в разы - http://selenium.goog...ntListener.html
Описание:
1) Кейс проверяет какой-то функционал.
2) Тест прошёл, система отреагировала адекватно.
3) Но вместе с адекватным поведением системы где-нибудь в уголке веб-странички появился Warning или Error, которого не должно быть, или отвалился AJAX в неиспользуемом в данном тесте поле в другом углу.
Функционал отработал корректно => тест "зелёненький", но появился Warning или произошло что-то некорректное, не связанное с тестируемым функционалом. Именно это и хочет отловить ТС.
ТС не знает заранее ответ ни на один из вопросов:
1) будет Error или Warning? или PopUp? или System.Alarm? или что-то ещё?
2) какое может быть содержимое неожиданного мессаджа (если это сообщение)?
3) где возникнет проблема? (в каком теге, в каком месте HTML-дерева)
4) в чём будет выражаться некорректность поведения? (логаут, смена сессии, очищение левого дропдауна, лишний текст, бэкграунд, дублирование контента, ...)
При этом ТС хочет всех их отлавливать.
При ручном тестировании человек легко глазами замечает такие исключения.
У меня был коллега, который тоже через 2-3 месяца работы захотел "отлавливать всё" (в т.ч. лишние поля/кнопки, отсутствие нужных полей/кнопок, все варнинги, ерроры, иксепшены). Хотел даже трёхсимвольную капчу с разными наклонами заавтоматизировать через Sikuli создав БД всевозможных комбинаций и дальше поиска нужной капчи по сравнению
#12
Отправлено 30 сентября 2013 - 14:43
Petrov.Sergey, описание у вас правильное, а дальше пошел какой-то адов сарказм. Я как раз знаю где в DOM отлавливать сообщения, о чем писал выше - div.msgGrowl.error (это CSS-локатор, если что).
#13
Отправлено 01 октября 2013 - 06:13
Тогда это значительно облегчает задачу.Нельзя так просто взять и создать топик на http://software-testing.ru/...
Petrov.Sergey, описание у вас правильное, а дальше пошел какой-то адов сарказм. Я как раз знаю где в DOM отлавливать сообщения, о чем писал выше - div.msgGrowl.error (это CSS-локатор, если что).
Создайте свой метод для проверки наличия тега и дальнейшей обработки, если в этом теге что-то есть.
Далее просто этот метод вставляйте после каждого действия.
Грубо, но просто. А главное - решает Вашу проблему.
П.С. сарказм относился по большей части не только к вам, а вообще к тем, кто хочет автоматически отлавливать всё и везде (по сути, создав аналог глаз и мозга человека). Прошу прощения, если это сильно задело. Я предложил вариант решения.
Кстати, у Вас есть уверенность, что:
а) при всех отлавливаемых исключениях приложение выдаст ворнинг или еррор? (падение страницы не выдаст никаких сообщений)
б) выдаваемый ворнинг или еррор 100% будет в обозначенном Вами теге?
Если есть уверенность, то предложенный мной вариант сработает.
#14
Отправлено 01 октября 2013 - 09:02
Далее просто этот метод вставляйте после каждого действия.
А лучше все таки используйте EventFiringWebDriver и:
http://selenium.goog...nium.WebDriver)
#15
Отправлено 28 ноября 2013 - 21:45
Далее просто этот метод вставляйте после каждого действия.
А лучше все таки используйте EventFiringWebDriver и:
http://selenium.goog...nium.WebDriver)
Точно!
В Selenide есть метод для добавления листенеров:
WebDriverRunner.addListener(new AbstractWebDriverEventListener() { public void onException(Throwable throwable, WebDriver driver) { // TODO } });
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных