QA Interview Hub · База знань · Тести
Патерни
Screenplay: огляд
Що таке Screenplay
Screenplay (раніше Journey pattern) це альтернатива Page Object, побудована навколо акторів, а не сторінок. Популярна реалізація для TypeScript і Playwright це Serenity/JS.
Основні поняття:
- Actor - хто діє (наприклад, "Олена, клієнт банку").
- Ability - що актор вміє: керувати браузером, викликати API.
- Task - бізнес-задача, складена з інших задач і взаємодій ("Перевести гроші").
- Interaction - низькорівнева дія (клік, ввід).
- Question - що актор може дізнатися про систему (текст, стан), використовується в перевірках.
Тест виглядає як опис поведінки: актор виконує задачі і ставить питання.
await actorCalled('Olena').attemptsTo(
Navigate.to('/transfers'),
TransferMoney.of(100).to('UA002'),
Ensure.that(Text.of(Balance.label()), equals('900.00 EUR')),
);
Ідея в тому, що Task дрібні і незалежні, їх легко комбінувати, і кожна відповідає принципу єдиної відповідальності. Page Object навпаки часто розростається, бо збирає все, що є на сторінці.
На співбесіді: Screenplay моделює тест через акторів, їхні вміння, задачі і питання до системи, а не через сторінки. У TS-світі його реалізує Serenity/JS, і він добре масштабується на великі доменні сценарії з кількома ролями.
Screenplay vs POM: коли не варто
Реалістична оцінка, яку очікують на senior-співбесіді:
| Критерій | POM + фікстури | Screenplay |
|---|
| Поріг входу | низький | високий |
| Поширеність у Playwright | стандарт | нішевий |
| Кілька ролей у сценарії | вручну | природно |
| Обсяг коду | менше | більше дрібних класів |
Screenplay виправданий, коли багато акторів взаємодіють в одному сценарії (клієнт, оператор, адмін), домен складний і тести пишуть як живу документацію.
Коли НЕ варто:
- Команда невелика або з різним рівнем, і поріг входу стане вузьким місцем.
- Проєкт середнього розміру, де POM з компонентами і фікстурами вже закриває потреби.
- Хочеться "модного" фреймворку без реальної проблеми, яку він вирішує.
Фікстури Playwright і шар Steps вже дають більшу частину переваг: DI, бізнес-кроки, звітність через test.step. Тому для більшості проєктів на Playwright стандартом є саме POM.
Типова помилка: стверджувати, що Screenplay "кращий за POM" без контексту, або навпаки відкидати його, не знаючи ідеї. Правильна відповідь показує trade-off.
На співбесіді: Я знаю Screenplay і розумію його переваги для складних доменів з кількома ролями, але для більшості Playwright-проєктів обираю POM з компонентами і фікстурами, бо поріг входу нижчий і команда швидше пише тести.