Цель: Базовые абстракции для реализации паттерна Page Object Model (POM) с использованием паттерна обёртки (Wrapper pattern).
Компоненты:
-
IWrapper - Базовый интерфейс обёрточного паттерна
- Предоставляет доступ к обёрнутому объекту через свойство
WrappedItem
- Предоставляет доступ к обёрнутому объекту через свойство
-
ILocatorWrapper - Интерфейс для обёрток Playwright локаторов
- Наследуется от
IWrapper<TLocator>гдеTLocator- тип локатора Playwright
- Наследуется от
-
IPageWrapper - Интерфейс для обёрток страниц Playwright
- Наследуется от
IWrapper<TPage>гдеTPage- тип страницы Playwright - Дополнительно предоставляет свойство
Urlдля получения URL страницы
- Наследуется от
Цель: Инфраструктура для запуска E2E тестов на базе Playwright с поддержкой Dependency Injection и паттерна Page Object Model.
Архитектура:
- Построена на принципах Dependency Injection
- Использует паттерн Factory для создания компонентов
- Поддерживает различные стратегии аутентификации
Основные компоненты:
IPlaywrightFactory / PlaywrightFactory
- Создаёт и кэширует экземпляр Playwright
- Применяет конфигурацию через generic параметр
- Использует lazy loading для инициализации
IBrowserFactory / BrowserFactoryBase
- Абстрактная фабрика для создания браузерных контекстов
- Поддерживает различные браузеры (Chrome, Firefox)
- Интегрируется со стратегиями аутентификации
ChromeFactory, FirefoxFactory
- Конкретные реализации для запуска Chrome/Firefox браузеров
- Используют IBrowserConfigurator для настроек запуска
PersistentChromeFactory, PersistentFirefoxFactory
- Создают персистентные контексты браузеров с отдельными директориями пользователей
- Используются для сохранения состояния между тестами
PageObjectsFactory
- Реализует IPageFactory, IControlFactory, IPageObjectsFactory
- Создаёт page objects и элементы управления с dependency injection
- Поддерживает создание коллекций элементов
IAuthStrategy / IAutentificator
- Определяют интерфейсы для работы с аутентификацией
- Поддерживают кэширование состояния браузера
AuthWithCacheStrategy
- Кэширует состояние аутентификации между тестами
- Использует двойную проверку блокировки для thread safety
WithoutAuthStrategy / WithoutAuthAutentificator
- Пустые реализации для сценариев без аутентификации
IPlaywrightConfiguration / DefaultPlaywrightConfiguration
- Настраивают глобальные параметры Playwright
- Устанавливают атрибут для поиска элементов по data-tid
IBrowserConfigurator / HeadlessConfigurator
- Определяют параметры запуска браузеров
- Автоматически определяют headless режим в CI среде
ITracingConfigurator / DefaultTracingConfigurator / FixtureTracingConfigurator
- Конфигурируют трассировку Playwright
- Сохраняют трассировку в ZIP файлы с названиями тестов
ITestInfoGetter
- Предоставляет информацию о текущем тесте (ID, имя, класс, рабочая директория)
IBrowserGetter / DefaultBrowserGetter
- Создают и управляют контекстами браузеров
- Интегрируют трассировку автоматически
IContextTracing / ContextTracing
- Управляют трассировкой на уровне контекста браузера
- Стартуют и останавливают запись трассировки
ILocalStorage / LocalStorage
- Предоставляют доступ к localStorage браузера
- Реализуют полный API localStorage (get, set, remove, clear)
IPageGetter / PageGetter
- Получают активную страницу браузера
- Создают новую страницу при необходимости
ILoadable
- Интерфейс для объектов, требующих асинхронной загрузки
ElementsCollection
- Представляет коллекцию элементов на странице
- Поддерживает фильтрацию, доступ по индексу
- Реализует IEnumerable для итерации
ElementsCollectionExtensions
- Расширения для работы с коллекциями
- Предоставляют методы для проверки текста элементов с учётом порядка
IDependenciesFactory / DependencyFactory
- Создают зависимости для конструкторов page objects
- Используют IServiceProvider для разрешения зависимостей
IDependenciesFilter / DefaultDependenciesFilter
- Фильтруют параметры конструкторов
- Исключают базовые типы Playwright (IPage, ILocator) из DI
ServiceCollectionExtensions
- Расширения для IServiceCollection для регистрации компонентов в DI контейнере
- Предоставляет AddPlaywrightTestCore для полной настройки
BrowsersInstaller
- Устанавливает браузеры Playwright перед запуском тестов
ServiceCollectionExtensions.UsePlaywright()
- Расширения для регистрации всех компонентов TestCore в DI контейнере с поддержкой NUnit
- Включает TestInfoGetter для получения информации о тестах из NUnit TestContext
TestInfoGetter
- Адаптер для получения метаданных тестов из NUnit TestContext
RunPwShould
- Стандартный тестовый класс демонстрирующий использование инфраструктуры
- Показывает работу с Navigation, локаторами и assertions
Регистрация с NUnit:
services.AddPlaywrightTestCore<TestInfoGetter>(); // Полная настройка с TestInfoGetterПростая регистрация:
services.UsePlaywright(); // Удобный метод для NUnit проектовРасширенная конфигурация:
services.AddPlaywrightTestCore<CustomTestInfoGetter>()
.AddScoped<IBrowserConfigurator, CustomBrowserConfigurator>() // Своя конфигурация браузера
.AddScoped<IAuthStrategy, CustomAuthStrategy>(); // Своя стратегия аутентификации- Dependency Injection в основе - все компоненты разрешаются через DI
- Lazy loading - тяжёлые объекты (Playwright, браузеры) создаются по требованию
- Thread safety - стратегии аутентификации защищены от конкурентного доступа
- Расширяемость - интерфейсы позволяют легко заменять реализации
- Гибкая конфигурация DI - единый метод AddPlaywrightTestCore для полной настройки
- Интеграция с Playwright - полная поддержка всех возможностей Playwright
- POM паттерн - поддержка создания типизированных page objects
- Tracing и отладка - встроенная поддержка трассировки для debugging
- CI/CD готовность - автоматическое определение headless режима
- Фреймворк-агностичность - поддержка разных фреймворков тестирования через generic параметр
Эта инфраструктура предоставляет полноценное решение для E2E тестирования веб-приложений с Playwright, следуя современным принципам архитектуры и обеспечивая высокую поддерживаемость и расширяемость кода тестов.