Python мануфактураJavaDesign Patterns для автоматизаторів

Java · Додаткові матеріали · 44:07–45:39

Спільне завантаження конфігурації в `BaseTest`

Службове завантаження `.env` переноситься з конкретного test class у `BaseTest`, а тест успадковує доступ до спільної конфігурації через `extends BaseTest`. Rename refactoring використовується для коротшої зрозумілої назви поля без ручного виправлення всіх посилань. Це невелике спільне місце для setup, а не побудова повної test architecture наперед.

Маленький рефакторинг і тестові дані у Java →

Java · Основний курс · 1:20:17–1:23:19

Повторне використання token і controllers у `BaseTest`

Щоб не передавати token в кожен controller method, `BaseController` зберігає його у field і додає authorization header, якщо значення не порожнє. Token-setting method повертає controller type, щоб його можна було викликати у fluent chain. Після цього resource methods більше не мають token parameter. Controller instances та login setup виносяться в `BaseTest`. Token отримується один раз у `@BeforeAll`, після чого ним конфігуруються `ProjectController` і `SuiteController`. Фінальний test залишає видимими лише сценарій, test data і assertions, а transport details залишаються у controllers.

API-автоматизація: MVC і Jackson →

Java · Основний курс · 10:20–14:20

Fluent interface у Page Objects

Щоб будувати виклики через крапку, метод Page Object замість `void` повертає поточний тип і завершується `return this`. Так `open()` може повернути `SignInPage`, після чого одразу викликається `loginUser(...)`. У відео цей стиль пов'язують із назвами fluent interface та chain of invocation; у заголовку уроку також використано Chain of responsibility. Повернення `this` зручне для послідовності дій у межах одного Page Object. Повертати з кожного методу наступну сторінку викладач не радить: довгі ланцюжки приховують переходи й ускладнюють code review. Допустимий локальний виняток — компонент або popup, який належить поточній сторінці й природно стає наступним об'єктом взаємодії. Спільні значення, потрібні кільком тестам, переносяться до наявного `BaseTest`, а не дублюються. Для них обирається найвужча достатня видимість, у прикладі — `protected` для класів-нащадків.

Selenide: iframe, fluent interface та конфігурація →

Java · Основний курс · 14:20–19:20

Спільний login і читабельні ланцюжки дій

Повторюваний login переноситься до `BaseTest`, після чого тест починається з уже відкритої сторінки проєктів. Запуск підтверджує успішну авторизацію, а консольний звіт показує пройдену перевірку `shouldBe(visible)` та її тривалість у мілісекундах. Коли fluent interface утворює довгий вираз, кожну логічну дію варто переносити на окремий рядок. Це не змінює виконання, але дозволяє читати сценарій зверху вниз і швидше співвідносити падіння зі звітом.

Selenide: iframe, fluent interface та конфігурація →

Java · Основний курс · 49:40–55:30

Application object як контейнер Page Objects

Коли `BaseTest` починає відповідати за login, конфігурацію та ініціалізацію всіх Page Objects, він перетворюється на надто широкий контейнер. Ініціалізація сторінок переноситься до окремого `Application`, а тест отримує один об'єкт `app` і звертається через нього до потрібної сторінки. У відео цей підхід порівнюється з агрегатором або facade і застерігається, що глобальний God Object погано масштабується на дуже великі паралельні набори тестів. Для невеликого навчального проєкту Application object спрощує сценарії. Якщо система має окремі домени, наприклад сайт і адмінку, їх можна розділити на `WebsiteApplication` та `AdminApplication` замість одного безмежного контейнера.

Selenide: iframe, fluent interface та конфігурація →
Запитати в чаті про «BaseTest» →