Files
homework_1/README.md

112 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.