# OTUS Selenium Homework 2 (BDD + Cucumber) ## Цель проекта Реализовать BDD-подход на `https://otus.ru` с использованием Selenium WebDriver 4+, Cucumber (русские feature), JUnit 5, Guice DI, listeners, Stream API, Jsoup и проверок качества (Checkstyle + SpotBugs). ## Стек технологий - Java 21 - Maven - Selenium `4.38.0` - JUnit 5 - Cucumber (`cucumber-java`, `cucumber-junit-platform-engine`) - Guice - Jsoup - Checkstyle - SpotBugs ## Реализованные BDD-сценарии 1. Выбор браузера через feature. - Шаг: `Дано Открыт браузер Chrome` - Фабрика драйвера выбирается по `browser` property (`chrome`) 2. Поиск курса по имени и случайный выбор при множественных результатах. - Название курса задается в feature - Выбирается случайный курс из найденных - Проверяется заголовок открытой страницы курса 3. Поиск курсов, стартующих в указанную дату или позже. - Дата задается в feature (`dd.MM.yyyy`) - Выполняется фильтрация `startDate >= dateFrom` - В консоль выводится: название + дата старта 4. Раздел «Обучение» -> «Подготовительные курсы». - Открывается пункт `Подготовительные курсы` из меню `Обучение` - При необходимости нажимается `Показать еще ...`, чтобы загрузить весь список - Из списка выбираются самый дорогой и самый дешевый - Выбор реализован через Stream API + `filter` - Информация о курсах выводится в консоль 5. Общий каталог курсов: самый дорогой и самый дешевый по полной стоимости со скидкой. - Открывается `https://otus.ru/catalog/courses` - Для каждого курса берется цена сравнения: - В приоритете `Полная` -> `Полная стоимость со скидкой` - Для упрощенных online-страниц используется fallback по видимой цене - Через `filter` выбираются max/min, результат выводится в консоль ## Архитектура - 2-уровневый тест-дизайн: `BDD steps` + `page objects` - DI через Guice для step definitions и страниц - Фабрика драйвера: - `DriverFactory` (интерфейс) - `ChromeDriverFactory` (реализация) - `WebDriverProvider` (жизненный цикл драйвера + декоратор listener) - Подсветка через listener: - Подсветка ставится в `beforeClick` - Снимается в `afterClick` - Стиль элемента возвращается в исходное состояние ## Структура проекта - `src/main/java/ru/kovbasa/config` — DI-конфигурация - `src/main/java/ru/kovbasa/driver` — фабрика и провайдер WebDriver - `src/main/java/ru/kovbasa/listeners` — listener подсветки - `src/main/java/ru/kovbasa/pages` — Page Object классы - `src/main/java/ru/kovbasa/elements` — типизированные UI-элементы - `src/test/resources/features` — `.feature` файлы (русский язык) - `src/test/java/ru/kovbasa/bdd` — Cucumber runner - `src/test/java/ru/kovbasa/bdd/steps` — step definitions - `src/test/java/ru/kovbasa/bdd/hooks` — lifecycle hooks ## Требования к окружению 1. Установлен JDK 21 (доступен в `PATH`) 2. Установлен Google Chrome 3. Установлен Maven 3.9+ 4. Есть доступ в интернет и к `otus.ru` (тесты запускаются на живом сайте) ## Запуск ### 1. Запуск всех тестов ```bash mvn test ``` ### 2. Запуск конкретного Cucumber runner ```bash mvn "-Dtest=ru.kovbasa.bdd.CucumberTest" test ``` ### 3. Локальная полная проверка (необязательно для сдачи ДЗ) ```bash mvn verify ``` ## Параметры запуска Пробрасываются через Maven Surefire: - `base.url` (по умолчанию `https://otus.ru`) - `course.name` (по умолчанию `Python Developer`) - `browser` (по умолчанию `chrome`) Пример переопределения: ```bash mvn "-Dbrowser=chrome" "-Dcourse.name=Python" test ``` ## Quality Gates - Checkstyle и SpotBugs выполняются в фазе `verify` (опционально) ## Примечания - Тесты зависят от текущей верстки/контента `otus.ru`. - По умолчанию в `mvn test` запускается только `CucumberTest`. - Для сдачи ДЗ достаточно успешного запуска `mvn test`.