Розділ 1 з 12

Навіщо Page Object Model

Коли тестів десятки, ті самі локатори й послідовності дій повторюються у багатьох файлах. Page Object Model збирає знання про сторінку в одному класі, а тести говорять мовою застосунку: «увійти», «додати в кошик».

Документація описує page object як представлення частини вебзастосунку. В інтернет-магазині це можуть бути головна сторінка, каталог і сторінка оформлення замовлення. За документацією, page objects дають дві переваги. Вони спрощують написання тестів, бо створюють API вищого рівня, що відповідає вашому застосунку. І вони спрощують підтримку, бо селектори зібрано в одному місці, а код можна перевикористати замість повторювати.

POM — не функція Playwright, а патерн організації коду. Playwright нічого не вимагає від ваших класів: page object — звичайний TypeScript-клас, який усередині використовує page.

Що буде, коли зміниться інтерфейс?

Три тести логіну без POM і з POM. Натисніть «Змінити UI»: розробники перейменували підпис поля Email на «Email address». Підсвічено рядки, які доведеться правити.

POM — не обов'язкова церемонія

Проблема. Інколи POM сприймають як правило «на кожну сторінку клас, на кожну кнопку метод», навіть для двох тестів.

Чому. Патерн окупається, коли сторінкою користуються кілька тестів і інтерфейс змінюється. Для одноразової перевірки він лише додає шар коду.

Рішення. Виносьте в page object те, що повторюється: локатори, які використовуються більше ніж в одному тесті, і послідовності дій з бізнес-змістом.

Коли. Щойно той самий локатор чи сценарій з'являється вдруге.