ДЗ #2
This commit is contained in:
76
README.md
76
README.md
@@ -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`.
|
||||
|
||||
Reference in New Issue
Block a user