Шаблон проектирования COM для автоматизации с Selenium и Cucumber

Объектная модель компонентов (COM) – это шаблон проектирования, который позволяет структурировать тесты в проектах автоматизации тестирования. Вдохновившись популярной моделью объектов страницы (POM), COM выходит за рамки обработки целых страниц и фокусируется на конкретных компонентах пользовательского интерфейса, таких как кнопки, текстовые поля, выпадающие меню или другие повторно используемые элементы.

В этом руководстве мы объясним, как реализовать COM для тестирования веб-приложения с WebDriver Selenium и Cucumber и как этот подход может сделать ваши тесты более гибкими, модульными и легкими в обслуживании.

Что такое объектная модель компонентов?

Объектная модель компонентов (COM) является эволюцией модели POM. Вместо моделирования целой страницы как объекта с методами взаимодействия со всеми элементами страницы, COM разбивает пользовательский интерфейс на отдельные компоненты, такие как:

  • Кнопки
  • Текстовые поля
  • Выпадающие меню
  • Полосы поиска
  • Таблицы

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

Почему использовать COM вместо POM?

1. Увеличенная модульность

С COM каждый компонент (например, кнопка или текстовое поле) является независимой сущностью. Если компонент изменяется (например, меняется текст кнопки), вам нужно изменить только класс компонента, не затрагивая другие компоненты или страницы. Это обеспечивает высокую модульность и предотвращает необходимость модифицировать целые страницы из-за незначительных изменений.

2. Повторное использование и гибкость

Компоненты могут быть использованы повторно на различных страницах приложения, что сокращает дублирование кода. Например, компонент ButtonComponent может быть использован на любой странице, где присутствует кнопка, уменьшая избыточность и повышая гибкость тестирования.

3. Упрощенное обслуживание

Обслуживание проще с COM. Если компонент изменяется (например, кнопка или текстовое поле), вам нужно изменить только класс, представляющий этот компонент. Все тесты, использующие этот компонент, будут автоматически обновлены, не требуя повторного прохождения каждого сценария тестирования.

4. Адаптировано к динамическим интерфейсам

Современные приложения часто динамичны, с интерфейсами, которые часто меняются. COM идеален для таких приложений, потому что он позволяет тестировать компоненты независимо от интерфейса. Вы можете изменять или добавлять компоненты, не влияя на тесты других частей приложения.

5. Ускоренная автоматизация тестирования

COM ускоряет автоматизацию тестирования. Централизуя взаимодействие с компонентами в повторно используемые классы, тестировщикам не нужно переопределять действия для каждой страницы или компонента. Например, одноопределение в один шаг для действия «нажать кнопку» можно использовать во всех тестах проекта, что значительно сокращает время, необходимое для автоматизации тестов.

6. Избегание повторения работы между тестировщиками

С COM тестировщикам больше не нужно повторять одну и ту же работу для каждого теста. Централизованные определения шагов для общих действий, таких как «нажать кнопку» или «ввести текст», могут быть использованы всеми тестировщиками в проекте. Это обеспечивает последовательность в тестах, избегая излишнего повторения, улучшая эффективность и сотрудничество между тестировщиками.

Архитектура проекта COM

Архитектура проекта на основе COM структурирована вокруг трех основных элементов: компоненты, определения шагов и запускающий модуль.

1. Компоненты

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

Вот пример класса ButtonComponent:

Plain Text

 

2. Определения шагов

Определения шаговсвязывают шаги, определенные в файлах Gherkin, с методами компонентов. Они отвечают за взаимодействие с компонентами и реализацию действий, указанных в сценарии теста.

Вот пример ButtonStepDefinition:

Plain Text

 

3. Запускающий

Класс запускающий отвечает за запуск тестов с использованием JUnit или TestNG. Он настраивает Cucumber для загрузки сценариев тестов, определенных в файлах .feature, и их запуска с использованием определений шагов.

Вот пример TestRunner:

Plain Text

 

Написание и объяснение сценария на Gherkin

Одним из основных элементов автоматизации с Cucumber является использование языка Gherkin для написания сценариев тестов. Gherkin позволяет описывать тесты в понятной и доступной форме, даже для непрофессионалов в области технологий.

Давайте рассмотрим сценарий, в котором мы хотим протестировать взаимодействие с кнопкой, используя ранее определенный ButtonComponent. Вот как это может быть записано на Gherkin:

Scenario: User clicks on the "Submit" button
   Given I am on the login page
   When I click on the button "Submit"
   Then I should be redirected to the homepage


Объяснение Сценария

Сценарий

Этот сценарий описывает действие, при котором пользователь нажимает кнопку “Отправить” на странице входа и убеждается, что после нажатия он перенаправляется на главную страницу.

  • Предположим, что я нахожусь на странице входа: Начальное состояние теста – пользователь находится на странице входа.
  • Когда я нажимаю на кнопку “Отправить: Действие, выполняемое в тесте – нажатие кнопки “Отправить”.
  • Тогда меня должно перенаправить на главную страницу: Ожидаемая проверка – пользователь будет перенаправлен на главную страницу после нажатия кнопки.

Связь с COM

Каждый шаг в этом сценарии сопоставлен с определением шага в ButtonStepDefinition, где действие нажатия обрабатывается компонентом ButtonComponent, что делает тест модульным и легким в обслуживании.

Дополнительное объяснение

Обратите внимание, что шаги принимают отображаемый текст на кнопках (или заполнителях в полях ввода и т. д.) в качестве параметров. Это делает сценарии более читабельными и универсальными. Например, в приведенном выше сценарии текст кнопки “Отправить” используется непосредственно в шаге “Когда я нажимаю кнопку ‘Отправить.’” Таким образом, одну и ту же определение шага можно использовать повторно для тестирования другой кнопки, например, “Вход,” просто изменив текст в сценарии Gherkin. Это улучшает повторное использование кода теста, делая сценарии более интуитивными и гибкими.

Повторное использование шагов с COM

Одним из ключевых преимуществ COM является возможность повторного использования определений шагов для разных кнопок. Например, один и тот же шаг Когда я нажимаю кнопку {string} может использоваться для всех кнопок независимо от отображаемого текста на кнопке. Подход COM позволяет динамически параметризовать действие нажатия на кнопку на основе текста кнопки.

Рассмотрим другой сценарий с другой кнопкой:

Сценарий

Plain Text

 

В обоих случаях, будет использоваться один и тот же метод clickButton в ButtonComponent, но текст кнопки будет меняться в зависимости от сценария. Это демонстрирует, как COM позволяет повторно использовать один и тот же компонент и определение шага, делая тесты гибкими и модульными.

Как COM улучшает автоматизацию тестирования

COM улучшает автоматизацию тестирования несколькими способами:

  • Уменьшение дублирования кода: Используя повторно используемые компоненты, вы уменьшаете дублирование кода в тестах. Например, компонент ButtonComponent, используемый на нескольких страницах приложения, устраняет необходимость писать повторяющиеся тесты.
  • Более читабельные и изменяемые тесты: Тесты становятся более понятными и легкими для понимания, поскольку они отделены от деталей реализации, специфичных для страницы. Вы можете сосредоточиться на взаимодействии с компонентами, не беспокоясь о базовой структуре страницы.
  • Простота обслуживания: Любое изменение компонента (например, изменение текста кнопки) затрагивает только класс компонента, а не тесты. Это делает обслуживание более простым и быстрым.
  • Более гибкие тесты: Тесты легко адаптируются к изменяющемуся пользовательскому интерфейсу, поскольку компоненты независимы друг от друга. Вы можете тестировать новые компоненты или заменять существующие, не влияя на другие тесты.

Когда рекомендуется использовать шаблон проектирования COM?

Этот шаблон проектирования рекомендуется, если веб-приложение, которое тестируется, использует унифицированную систему дизайна для всех компонентов. Например, если все кнопки объявлены одинаково, с согласованной структурой для всех элементов пользовательского интерфейса. В таких случаях использование COM позволяет централизовать взаимодействие с каждым типом компонента (например, кнопками, текстовыми полями и т. д.), делая тесты более модульными, повторно используемыми и легкими в обслуживании.

Повторное использование определений шагов для нескольких продуктов

Если вы разрабатываете и тестируете несколько продуктов, использующих одну и ту же систему дизайна, вы можете создать библиотеку, которая охватывает все определения шагов и действия (или почти все) для каждого компонента. Это позволяет тестировщикам сосредоточиться исключительно на написании сценариев Gherkin, и тесты будут автоматизированы. Поскольку все веб-элементы написаны одинаково (HTML), компоненты, такие как кнопки, текстовые поля и другие элементы пользовательского интерфейса, будут вести себя последовательно во всех проектах.

В результате тестировщикам больше не нужно повторять одни и те же задачи – определение шагов и действий для идентичных компонентов в разных проектах. Такой подход экономит время и улучшает поддерживаемость. Если веб-элемент изменен (например, если изменится XPath), вам нужно будет обновить только этот элемент в общей библиотеке, и изменения будут автоматически применены ко всем проектам автоматизации. Это снижает риск ошибок и делает обновления более эффективными для различных продуктов.

Вывод

Объектно-ориентированная модель компонентов (COM) – мощный шаблон проектирования для организации тестирования. Сосредотачиваясь на повторно используемых компонентах, COM позволяет создавать более модульные, удобные для поддержки и масштабируемые тесты. Этот шаблон особенно полезен для современных приложений, где пользовательский интерфейс быстро меняется и взаимодействие с независимыми компонентами является важным.

С многократно используемыми тестами, упрощенным обслуживанием и гибкой архитектурой, COM является идеальным решением для автоматизации тестирования в проектах Selenium и Cucumber.

Source:
https://dzone.com/articles/com-design-pattern-selenium-and-cucumber