This commit is contained in:
2026-02-14 21:56:07 +03:00
parent 895bea43d2
commit b414beb6fb
23 changed files with 694 additions and 250 deletions

View File

@@ -1,42 +1,51 @@
# OTUS Selenium Homework 1
# OTUS Selenium Homework 2 (BDD + Cucumber)
## Цель проекта
Автоматизировать 3 UI-сценария на `https://otus.ru` с использованием Selenium WebDriver 4+, JUnit 5, Guice DI, listeners, Stream API, Jsoup и обязательных проверок качества (Checkstyle + SpotBugs).
Реализовать 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`
- WebDriverManager `6.3.3`
- JUnit 5
- Cucumber (`cucumber-java`, `cucumber-junit-platform-engine`)
- Guice
- Jsoup
- Checkstyle
- SpotBugs
## Реализованные сценарии
1. Поиск курса по имени.
- Открытие каталога `https://otus.ru/catalog/courses`
- Поиск курса по имени через Stream API
- Клик по плитке курса
- Проверка заголовка открытого курса
## Реализованные BDD-сценарии
1. Выбор браузера через feature.
- Шаг: `Дано Открыт браузер Chrome`
- Фабрика драйвера выбирается по `browser` property (`chrome`)
2. Самые ранние/поздние курсы по дате старта.
- Открытие каталога `https://otus.ru/catalog/courses`
- Поиск ранних и поздних курсов через Stream API + `reduce`
- При совпадении дат проверяются все курсы с этой датой
- Проверка названия и даты старта на странице курса через Jsoup
2. Поиск курса по имени и случайный выбор при множественных результатах.
- Название курса задается в feature
- Выбирается случайный курс из найденных
- Проверяется заголовок открытой страницы курса
3. Случайная категория с главной страницы.
- Открытие `https://otus.ru`
- Открытие меню «Обучение»
- Выбор случайной категории
- Проверка, что открыта корректная категория
3. Поиск курсов, стартующих в указанную дату или позже.
- Дата задается в feature (`dd.MM.yyyy`)
- Выполняется фильтрация `startDate >= dateFrom`
- В консоль выводится: название + дата старта
4. Раздел «Обучение» -> «Подготовительные курсы».
- Открывается пункт `Подготовительные курсы` из меню `Обучение`
- При необходимости нажимается `Показать еще ...`, чтобы загрузить весь список
- Из списка выбираются самый дорогой и самый дешевый
- Выбор реализован через Stream API + `filter`
- Информация о курсах выводится в консоль
5. Общий каталог курсов: самый дорогой и самый дешевый по полной стоимости со скидкой.
- Открывается `https://otus.ru/catalog/courses`
- Для каждого курса берется цена сравнения:
- В приоритете `Полная` -> `Полная стоимость со скидкой`
- Для упрощенных online-страниц используется fallback по видимой цене
- Через `filter` выбираются max/min, результат выводится в консоль
## Архитектура
- 2-уровневый тест-дизайн: `tests` + `page objects`
- DI через Guice для тестов и страниц
- JUnit 5 Extension (`GuiceExtension`), без базового класса-теста
- 2-уровневый тест-дизайн: `BDD steps` + `page objects`
- DI через Guice для step definitions и страниц
- Фабрика драйвера:
- `DriverFactory` (интерфейс)
- `ChromeDriverFactory` (реализация)
@@ -52,8 +61,10 @@
- `src/main/java/ru/kovbasa/listeners` — listener подсветки
- `src/main/java/ru/kovbasa/pages` — Page Object классы
- `src/main/java/ru/kovbasa/elements` — типизированные UI-элементы
- `src/test/java/ru/kovbasa/config` — JUnit extension для DI
- `src/test/java/ru/kovbasa/tests` — автотесты
- `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`)
@@ -62,33 +73,36 @@
4. Есть доступ в интернет и к `otus.ru` (тесты запускаются на живом сайте)
## Запуск
### 1. Запуск только тестов
### 1. Запуск всех тестов
```bash
mvn test
```
### 2. Полная проверка (тесты + Checkstyle + SpotBugs)
### 2. Запуск конкретного Cucumber runner
```bash
mvn verify
mvn "-Dtest=ru.kovbasa.bdd.CucumberTest" test
```
### 3. Запуск отдельного тестового класса
### 3. Локальная полная проверка (необязательно для сдачи ДЗ)
```bash
mvn "-Dtest=ru.kovbasa.tests.CourseSearchTest" test
mvn verify
```
## Параметры запуска
Пробрасываются через Maven Surefire:
- `base.url` (по умолчанию `https://otus.ru`)
- `course.name` (по умолчанию `Python Developer`)
- `browser` (по умолчанию `chrome`)
Пример переопределения:
```bash
mvn "-Dcourse.name=Python Developer" test
mvn "-Dbrowser=chrome" "-Dcourse.name=Python" test
```
## Quality Gates
- Checkstyle и SpotBugs выполняется в фазе `verify`
- Checkstyle и SpotBugs выполняются в фазе `verify` (опционально)
## Примечания
- Тесты зависят от текущей верстки/контента `otus.ru`.
- По умолчанию в `mvn test` запускается только `CucumberTest`.
- Для сдачи ДЗ достаточно успешного запуска `mvn test`.