Перейти к содержимому

Фотография

Асинхронное ожидание появления элемента


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 grinder

grinder

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 30 августа 2013 - 09:38

Всем привет.

Существует ли возможность поймать Webdriver'ом момент появления определенного элемента в DOM в любой момент прогона теста? Т.е. как поймать этот элемент в _определенный_ момент - понятно, но можно ли его ловить там, где он не ожидается?

Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error. Надо в этот момент остановить тест, сделать скриншот и логировать текст попапа.

PS: пишу тесты на Java, использую Selenide.
  • 0

#2 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 30 августа 2013 - 09:53

Всем привет.

Существует ли возможность поймать Webdriver'ом момент появления определенного элемента в DOM в любой момент прогона теста? Т.е. как поймать этот элемент в _определенный_ момент - понятно, но можно ли его ловить там, где он не ожидается?

Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error. Надо в этот момент остановить тест, сделать скриншот и логировать текст попапа.

PS: пишу тесты на Java, использую Selenide.

Почитайте про аспекты (аспектно-ориентированное программирование).
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 grinder

grinder

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 30 августа 2013 - 11:12

Почитайте про аспекты (аспектно-ориентированное программирование).
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?

Да вот именно, что не хотелось бы лезть в дебри...

Т.е. готовое и/или простое решение еще не существует?
  • 0

#4 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 30 августа 2013 - 12:18


Почитайте про аспекты (аспектно-ориентированное программирование).
Их внедрение довольно трудоёмко, но зато они решают Вашу проблему.
Надо ли оно Вам?

Да вот именно, что не хотелось бы лезть в дебри...

Т.е. готовое и/или простое решение еще не существует?

Готовое и простое - сомневаюсь.
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#5 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 30 августа 2013 - 13:00

Простейший пример - внезапно и незапланированно отвалился AJAX запрос, приложение бросает попапчик в духе div.msgGrowl.error.

При грамотно написанном тесте/фреймворке, тест сам в этом месте упадет, а фреймворк сделает скриншот и вытянет текст (если он есть). Искать *везде, где можно* то, чего *может нигде и не быть*, чем то напоминает фразу из сказки, и вряд ли может поддаваться тестированию, как мануальному, так и автоматизированному.
  • 0

#6 grinder

grinder

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 30 августа 2013 - 14:07

При грамотно написанном тесте/фреймворке, тест сам в этом месте упадет, а фреймворк сделает скриншот и вытянет текст (если он есть).

Как это сделать на уровне теста - плохо представляю, поэтому и ищу готовый фреймворк.

Искать *везде, где можно* то, чего *может нигде и не быть*, чем то напоминает фразу из сказки, и вряд ли может поддаваться тестированию, как мануальному, так и автоматизированному.

Ну почему, как раз человек легко такие вещи отлавливает. Речь идет именно о визуальном оповещении.
  • 0

#7 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 30 августа 2013 - 15:40

Как это сделать на уровне теста - плохо представляю, поэтому и ищу готовый фреймворк.

Я тоже, так как описание проблемы довольно абстрактно. А моем понимании, если есть запрос - ему предшествует определенное действие, а если есть действие, есть ожидаемый результат, которого не будет в случае фейла запроса=>тест падает=>тригается листенер, например TestNG => делается скриншот, проверяется наличие сообщения об ошибке и так далее.

Ну почему, как раз человек легко такие вещи отлавливает. Речь идет именно о визуальном оповещении.

Не все поддается автоматизации, некоторые вещи стоит оставить на стороне мануального тестирования.
  • 0

#8 kaa936

kaa936

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Alex

Отправлено 27 сентября 2013 - 11:55

Если я правильно понял задачу, то делается не так уж сложно. у самого тоже постоянно такие вещи творяться.
Во время прохода теста появление сообщений вроде "сервис недоступен" или 'в настоящий момент система.....' или стандартных ошибок 500 итд ведет к дальнейшему падению теста, без вменяемого лога.
вылез из ситуации написанием своего рода "демона" который парсит страницу на предмет появления span и div в которых innertext содержит сообщения из списка + остальные элементы разметки с ожидаемым текстом + ожидание win окошек по тексту заголовка ( это если падение совсем уж неожиданное). откомпилирован в exe
в начале основного теста я запускаю его с сохранение его PID
оба процесса общаются через INI файл. просто передавая некоторые флаги и переменные друг в друга ( например номер теста, который проводиться и главные тестовые данные)
если на странице происходит неожиданное исключение и тест падает, демон запоминает номер теста и входные данные в лог + делает скриншот экрана. и закрывается с возвращением exitcode отличным от нуля. Консоль из которой я запускаю серию тестов, пишет что конкретный тест фейл, (даные в лог уже положены демоном) и приступает к следующему.
Если тест удачно завершился, то демон убивается по его pid, чтобы дальше не мешал и не плодился.
  • 1

#9 grinder

grinder

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 30 сентября 2013 - 09:31

вылез из ситуации написанием своего рода "демона"...

Спасибо за ответ.
Сам такое, к сожалению, пока не осилю, но может удастся уломать дев тим подсобить.
  • 0

#10 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 30 сентября 2013 - 10:19

Не понимаю, чем вас onTestFailure не устраивает?
Хотите искать *всегда и везде* и не смущает, что время выполнения тестов увеличится в разы - http://selenium.goog...ntListener.html
  • 0

#11 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 30 сентября 2013 - 12:51

Не понимаю, чем вас onTestFailure не устраивает?
Хотите искать *всегда и везде* и не смущает, что время выполнения тестов увеличится в разы - http://selenium.goog...ntListener.html

Не додумываю за топикстартера, но предполагаю, что onTestFailure ему не подойдёт.

Описание:
1) Кейс проверяет какой-то функционал.
2) Тест прошёл, система отреагировала адекватно.
3) Но вместе с адекватным поведением системы где-нибудь в уголке веб-странички появился Warning или Error, которого не должно быть, или отвалился AJAX в неиспользуемом в данном тесте поле в другом углу.
Функционал отработал корректно => тест "зелёненький", но появился Warning или произошло что-то некорректное, не связанное с тестируемым функционалом. Именно это и хочет отловить ТС.

ТС не знает заранее ответ ни на один из вопросов:
1) будет Error или Warning? или PopUp? или System.Alarm? или что-то ещё?
2) какое может быть содержимое неожиданного мессаджа (если это сообщение)?
3) где возникнет проблема? (в каком теге, в каком месте HTML-дерева)
4) в чём будет выражаться некорректность поведения? (логаут, смена сессии, очищение левого дропдауна, лишний текст, бэкграунд, дублирование контента, ...)

При этом ТС хочет всех их отлавливать. :crazy:

При ручном тестировании человек легко глазами замечает такие исключения.

У меня был коллега, который тоже через 2-3 месяца работы захотел "отлавливать всё" (в т.ч. лишние поля/кнопки, отсутствие нужных полей/кнопок, все варнинги, ерроры, иксепшены). Хотел даже трёхсимвольную капчу с разными наклонами заавтоматизировать через Sikuli создав БД всевозможных комбинаций и дальше поиска нужной капчи по сравнению :biggrin:
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#12 grinder

grinder

    Новый участник

  • Members
  • Pip
  • 18 сообщений

Отправлено 30 сентября 2013 - 14:43

Нельзя так просто взять и создать топик на http://software-testing.ru/...

Petrov.Sergey, описание у вас правильное, а дальше пошел какой-то адов сарказм. Я как раз знаю где в DOM отлавливать сообщения, о чем писал выше - div.msgGrowl.error (это CSS-локатор, если что).
  • 0

#13 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 01 октября 2013 - 06:13

Нельзя так просто взять и создать топик на http://software-testing.ru/...

Petrov.Sergey, описание у вас правильное, а дальше пошел какой-то адов сарказм. Я как раз знаю где в DOM отлавливать сообщения, о чем писал выше - div.msgGrowl.error (это CSS-локатор, если что).

Тогда это значительно облегчает задачу.
Создайте свой метод для проверки наличия тега и дальнейшей обработки, если в этом теге что-то есть.
Далее просто этот метод вставляйте после каждого действия.

Грубо, но просто. А главное - решает Вашу проблему.

П.С. сарказм относился по большей части не только к вам, а вообще к тем, кто хочет автоматически отлавливать всё и везде (по сути, создав аналог глаз и мозга человека). Прошу прощения, если это сильно задело. Я предложил вариант решения.

Кстати, у Вас есть уверенность, что:
а) при всех отлавливаемых исключениях приложение выдаст ворнинг или еррор? (падение страницы не выдаст никаких сообщений)
б) выдаваемый ворнинг или еррор 100% будет в обозначенном Вами теге?
Если есть уверенность, то предложенный мной вариант сработает.
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#14 VitalyD

VitalyD

    Опытный участник

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 01 октября 2013 - 09:02

Далее просто этот метод вставляйте после каждого действия.




А лучше все таки используйте EventFiringWebDriver и:
http://selenium.goog...nium.WebDriver)
  • 0

#15 asolntsev

asolntsev

    Новый участник

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Андрей Солнцев
  • Город:Таллинн

Отправлено 28 ноября 2013 - 21:45

Далее просто этот метод вставляйте после каждого действия.




А лучше все таки используйте EventFiringWebDriver и:
http://selenium.goog...nium.WebDriver)


Точно!
В Selenide есть метод для добавления листенеров:

WebDriverRunner.addListener(new AbstractWebDriverEventListener() {
  public void onException(Throwable throwable, WebDriver driver) {
    // TODO 
  }
});

  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных