Пример реализации тестов Selenium с использованием паттерна Page Object Model (POM) и Dependency Injection.
Это базовая обвязка для Selenium WebDriver, демонстрирующая архитектуру тестового фреймворка с чистым разделением ответственности и использованием современных подходов C#/.NET.
Содержит абстракции для паттерна Page Object Model, независимые от конкретной реализации.
Интерфейсы:
-
IControlFactory<TWrappedItem>- фабрика для создания контролов (элементов страницы)Create<TControl>(IWrapper<TWrappedItem> wrapper, string dataTestId)- создание по data-test-idCreate<TControl>(Func<TWrappedItem> getItem)- создание через функцию получения элементаCreate<TControl>(TWrappedItem item)- создание напрямую из элемента
-
IPageFactory<TWrappedItem>- фабрика для создания страницCreate<TPage>(TWrappedItem page)- создание страницы из элементаCreate<TPage>(Func<TWrappedItem> getPage)- создание через функцию
-
IWrapper<TItem>- обертка над элементами для абстракции от конкретной реализации
Ядро тестового фреймворка с конкретной реализацией для Selenium WebDriver.
Browser (управление браузером):
IBrowserFactory- фабрика для создания экземпляров браузераIBrowserGetter- интерфейс для получения экземпляра WebDriverGetAsync()- асинхронное получение драйвера
IBrowserOptionsGetter<TOptions>- получение опций браузераGetOptionsAsync()- асинхронное получение конфигурации
DefaultBrowserProvider- стандартная реализация провайдера браузера с поддержкой DisposeDefaultChromeOptionsProvider- стандартные опции для Chrome
Controls (работа с элементами):
IControlFactory- расширенная фабрика контролов для SeleniumCreate<TControl>(IWrapper<IWebDriver> page, By by)- создание по локаторуCreate<TControl>(IWebDriver page, By by)- создание напрямуюCreate<TControl>(IWrapper<IWebDriver> page, string dataTestId)- создание по data-test-id
Dependencies (внедрение зависимостей):
IDependenciesFactory- фабрика для создания зависимостей контролов/страницCreateDependency(Type controlType)- создание массива зависимостей для типа
IDependenciesFilter- фильтрация зависимостейDependenciesFactory- реализация с использованием IServiceProvider
Page:
ILoadable- интерфейс для страниц с ожиданием загрузкиWaitLoadAsync()- асинхронное ожидание полной загрузки страницы
Extensions:
ServiceCollectionExtensions- расширения для регистрации сервисовUseChrome<TFactory, TOptions>()- регистрация Chrome браузера
- Разделение ответственности - абстракции отделены от реализации
- Dependency Injection - все зависимости инжектируются через конструктор
- Page Object Model - инкапсуляция элементов страницы в объекты
- Factory Pattern - создание контролов и страниц через фабрики
- Async/Await - поддержка асинхронных операций
- IDisposable/IAsyncDisposable - корректное освобождение ресурсов