DRY (Don’t Repeat Yourself) минимизирует дублирование кода и знаний в тестовом проекте. В контексте Protractor это снижает стоимость сопровождения, уменьшает вероятность расхождений тестовой логики и помогает соблюсти единообразие при работе с асинхронными операциями и локаторами.
Page Object Pattern служит базой для соблюдения DRY. Локаторы, методы взаимодействия и тестовые операции располагаются в отдельных объектах страниц, что исключает повторное объявление селекторов:
При использовании Protractor важно учитывать специфику
element и by, а также работу
ExpectedConditions для явных ожиданий. Правильное
размещение ожиданий в Page Objects упрощает управление
синхронизацией.
Одни и те же шаги встречаются во множестве утилитарных сценариев: авторизация, переход между страницами, заполнение форм, ожидания обновления DOM. Вынесение этих шагов в helper-модули устраняет расхождение в реализации логики переходов и проверок, особенно при сложной навигации или условных шагах.
Для Protractor характерна работа с промисами и цепочками действий. Унифицированные хелперы обеспечивают единое поведение при обработке исключений, логировании и повторных попытках.
Выделение локаторных фабрик позволяет хранить
правила поиска элементов в одном месте: динамические селекторы,
параметризованные атрибуты, комбинации by.css и
by.xpath. Это особенно полезно при тестировании крупных
SPA-приложений, где интерфейс часто изменяется.
Аналогичная практика применима к ожиданиям (waits).
Вынесенные функции ожиданий гарантируют корректное использование
browser.wait и ExpectedConditions и
ограничивают применение слишком агрессивных таймаутов или запрещают
неявные sleep.
DRY распространяется не только на код тестов, но и на конфигурацию и данные:
baseUrl,
capabilities, framework, suites)
вынесены в общий config.Повторяющиеся операции, завязанные на время (timeouts, ожидания, ретраи), переносятся в time utilities. В Protractor подобные операции особенно критичны, поскольку неправильные задержки приводят к нестабильным тестам. Единый модуль управляет:
DRY проявляется в утверждениях: часто проверяются одинаковые шаблоны состояний, например наличие уведомлений, состояние модальных окон или валидность формы. Создание assertion-модулей снижает риск расхождения в тексте сообщений или типах сравнения и обеспечивает консистентность тестовой отчетности.
Логирование браузерных событий, ошибок, коллстеков и скриншотов
оформляется в единый logging layer. Это исключает
дублирование кода по снятию скриншотов, записи логов и вложению
артефактов в отчетность. Для Protractor также актуально единое
управление browser.manage().logs() и сетевыми логами при
интеграции с отчетчиками.
Использование DRY в отчётности проявляется в создании общих модулей для:
Это устраняет дублирование скриптов и конфигураций для разных пайплайнов и веток.
Соблюдение DRY приводит к компоновочному эффекту: тесты сводятся к декларативной записи сценариев, а логика взаимодействия, проверок и ожиданий переносится в единые уровни абстракций. В Protractor это особенно заметно при работе с Angular-приложениями, где синхронизация и маршрутизация требуют аккуратной обработки.
DRY касается не только кода, но и знаний: проект содержит одно место для определения классов ошибок, правил ожидания, настроек локаторов, тестовых данных и общих флоу. Добавление или изменение знания производится единожды и распространяется по всей системе, что уменьшает стоимость сопровождения и снижает когнитивную нагрузку при развитии автоматизации.