112 lines
5.4 KiB
Markdown
112 lines
5.4 KiB
Markdown
# 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.40.0`
|
||
- JUnit `5.14.2` + JUnit Platform Suite `1.14.2`
|
||
- Cucumber (`cucumber-java` `7.34.2`, `cucumber-junit-platform-engine` `7.34.2`)
|
||
- Guice `7.0.0`
|
||
- Jsoup `1.22.1`
|
||
- Guava `33.5.0-jre`
|
||
- SLF4J `2.0.17`
|
||
- Logback `1.5.31`
|
||
- 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`.
|