Playwright CLI
Окремий command-line interface для token-efficient browser automation by coding agents.
Playwright MCP, CLI, Codegen та AI в розробці →Відеобібліотека
Пошук у нотатках курсу Java з переходом на потрібну секунду.
Окремий command-line interface для token-efficient browser automation by coding agents.
Playwright MCP, CLI, Codegen та AI в розробці →Щоб будувати виклики через крапку, метод Page Object замість `void` повертає поточний тип і завершується `return this`. Так `open()` може повернути `SignInPage`, після чого одразу викликається `loginUser(...)`. У відео цей стиль пов'язують із назвами fluent interface та chain of invocation; у заголовку уроку також використано Chain of responsibility. Повернення `this` зручне для послідовності дій у межах одного Page Object. Повертати з кожного методу наступну сторінку викладач не радить: довгі ланцюжки приховують переходи й ускладнюють code review. Допустимий локальний виняток — компонент або popup, який належить поточній сторінці й природно стає наступним об'єктом взаємодії. Спільні значення, потрібні кільком тестам, переносяться до наявного `BaseTest`, а не дублюються. Для них обирається найвужча достатня видимість, у прикладі — `protected` для класів-нащадків.
Заняття охоплює AI-підказки коду, звіти й скріншоти Selenide, fluent interface, Application object та налаштування `Configuration`. Практичний сценарій — відкрити проєкт у Testomat.io, перейти до README, увімкнути редагування, змінити текст у редакторі та зберегти його. Редактор вбудований через `iframe`, тобто містить окремий HTML-документ. Selenium і Selenide не починають автоматично виконувати команди всередині такого документа: як і для нової вкладки або alert, потрібно спочатку перемкнути контекст, а після роботи повернутися до зовнішньої сторінки.
iOS Human Interface Guidelines і Android Material guidelines задають expected platform behavior. Тестування має враховувати, що calendar, navigation, gestures і accessibility відрізняються між platforms. Мобільний product може бути responsive web, native, hybrid WebView або cross-platform. Hybrid app має native shell і web context, тому автоматизація має розуміти context switching й не трактувати все як однакову UI tree.
Повторюваний login переноситься до `BaseTest`, після чого тест починається з уже відкритої сторінки проєктів. Запуск підтверджує успішну авторизацію, а консольний звіт показує пройдену перевірку `shouldBe(visible)` та її тривалість у мілісекундах. Коли fluent interface утворює довгий вираз, кожну логічну дію варто переносити на окремий рядок. Це не змінює виконання, але дозволяє читати сценарій зверху вниз і швидше співвідносити падіння зі звітом.
Інкапсуляція поєднує стан і поведінку та визначає дозволений спосіб взаємодії з об’єктом. Практичний акцент — не «сховати все», а відкрити невеликий зрозумілий інтерфейс, який не змушує зовнішній код знати внутрішню послідовність дій. Користувач класу працює за правилами його публічних методів. Це знижує coupling: внутрішню реалізацію можна змінити, поки зовнішній контракт залишається стабільним.
Lombok `@Accessors(chain = true)` дозволяє ланцюжком викликати setters, а `@Data(staticConstructor = "of")` — створювати object без явного `new`. У демонстрації це скорочує вкладену підготовку request data порівняно з розгорнутим builder. Після створення suite тест має перевірити, що response містить згенерований title. Перший варіант зчитує його з RestAssured response через `jsonPath().getString(...)`; для endpoint, який повертає масив suites, потрібно отримати list titles, а не один string.
Над `Response` будується small fluent wrapper: status, typed body, field/domain assertions, завершення chain. Це дає тесту domain vocabulary і прибирає repeated parsing. Важливо не сховати expected behavior за великим «validateEverything». Fluent method має виражати одну observable property і давати specific failure.