Домой » Теория автоматизации » Переход от Page Object к Element Object

Переход от Page Object к Element Object

ЭлементыВсе мы слышали о паттерне Page Object. Вроде как и стараются его много где использовать, даже почти стандартом стал, но работает он не всегда. Если надо поля заполнять, файлы загрузить, кнопки нажимать и данные проверить где-нибудь, тогда, спору нет, он спасёт нас от мук. Но не всё так легко и просто в мире IT. Обо всём по порядку.

Предисловие

Всё началось с очередного проекта, который обладает своей спецификой: это не развлекательный сайт, не является он и каким-то приложением по оказанию услуг клиентам, он и информационный ресурс. Это всего навсего рабочее web — приложением одной организации, так сказать UI — оболочкой над базой данных, где заказчик просто обрабатывает свои данные в виде заявок, информации о клиентах и т.д.

Т.к. работа заключается в основном в обработке данных, то и напичкано всё это дело различными продвинутыми UI — компонентами, например, таблицами, деревьями, брэдкрамбами, дропдаунами. Поверх всего этого добра лежит bootstrap. Ниже примеры этих элементов.

Особенности тестирования

Забыл упомянуть, что все этого графического шедевра просто валом, т.е. на одной странице могло быть несколько таблиц и деревьев. Плюс ко всему прочему это SPA с кучей модалок (в которых тоже может быть дерево или таблица). И напоследок: многие элементы были не элементами, например, кнопок почти нету, а есть лишь ссылки с role=»button».

Короче говоря, обёртки у нас, практически, над всеми элементами, ведь где-то что-то было не по-людски ;). Единственным выход как опознать ту же таблицу — различать по хэдерам, а там уже с помощью XPath от него прыгать по все составным частям элемента (чекбоксам возле каждой записи, или контекстному меню там же, даже перейти на другую страницу без привязки к хэдеру не получалось).

Как перешли к Element Object

В начале статья и немного слукавил. Типичный Page Object остался, но из-за того, что многое мы обернули, там максимум 8-10 методов было. Остальное вынесено в сервисы. Т.к. тесты писали мы на C#, то использовали partial — классы. Класс Tree, для работы с деревом, состоит из 3 файлов: работа с хэдером дерева (поиск и прочие меню), работа с контентом и работа с отображением количества результатов. В таблице файлов гораздо больше: работа с меню (удаление, скрытие и добавление записи), работа с контентом(клик по номеру строки, клик по строки с определённым значение в нужном столбце, чтение всех данных и т.д.), работа с меню возле каждой записи (фактически дублировало основное меню, но иногда и дополняло его), переход по страницам на таблице.

Разнесение по файлам было произведено для удобства и лёгкой читаемости. Файл состоит из локаторов и минимальных логически допустимых действий. Более глобально всё делается в сервисных методах.

Зачем мы это сделали и как это работает?

Я боюсь представить как бы разрослись пейджи, если бы все действия пихали в них. Сервисный класс по работе с таблицей состоит, наверное, минимум из полусотни методов. Был бы дикий копипаст одних и тех же методов.

В заключении давайте представим, что на странице есть дерево и таблица. Мы в дереве выбираем запись и потом в таблице смотрим, чтобы все данные имели имели в колонке Status значение Vip. Сразу хочу извиниться, что эту дичь вам приходится читать, т.к. реального примера под рукой нету, а за скрин проекта обещали с окна выкинуть.

Как видно в примере, пэйджи практически не используется, в основном работа происходит в сервисах, которые относятся к какому-либо одному элементу.

В принципе всё на этом. Пишите свои комментарии или письма. Рад буду вашим отзывам.

9 Комментария к “Переход от Page Object к Element Object

  1. Бинго:

    Чувак…

    1. Administrator:

      Я Вас слушаю!

  2. Pavel Shirmovski:

    А как работает сервис можете показать?

    1. Administrator:

      Будет чуть позже.

  3. bytesurfer:

    Вы дилетант что в написании статей, что в автоматизации.

    1. Administrator:

      Ваше мнение очень ценно!

  4. В чем смысл статьи?Для спа приложений использование page fragment/page element является нормой и активно используется. Точно так же, как и вынесение сервисных методов в отдельное место.

    1. Administrator:

      Это не типичное спа. Страницы как таковые тоже есть. Чуть позже постараюсь более подробно всё расписать.

  5. Alex:

    Спасибо за статью и за то что поделились опытом!

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*