← Python мануфактура

Після цього уроку ви зможете

Конспект і таймкоди

0:00

Чому Playwright радить `getByRole`

getByRole спирається на роль і accessible name з accessibility tree. Інші user-facing locators — getByLabel, getByText, getByPlaceholder, getByAltText і getByTitle — шукають за відповідним видимим або описовим значенням. Усі вони читаються ближче до наміру користувача й роблять failure зрозумілішим для розробників — основної аудиторії результатів автотестів. Незначна різниця в швидкості locator неважлива порівняно з network та application latency.

Термін

user-facing locator

Locator, який знаходить element за роллю, accessible name, label, placeholder, text або іншим значенням, доступним користувачеві.

Приклад коду

Locator за роллю й accessible name

submit = page.get_by_role("button", name="Submit")
submit.click()

Locator описує кнопку так, як її знаходить користувач через accessibility semantics.

Очікуваний результат: Playwright знаходить одну кнопку Submit і натискає її.

Потрібно: playwright

Практика

Порівняти три locators

  1. Вибрати одну важливу дію в UI.
  2. Написати user-facing locator, test id locator і короткий CSS fallback.
  3. Змінити translation та experiment variant.
  4. Обрати найстабільніший locator і зафіксувати його contract.

Результат: Обраний locator залишається однозначним у контрольованих variants, а причина вибору описана одним абзацом.

4:00

Accessibility tree, локалізація і стабільність атрибутів

Chrome DevTools дозволяє подивитися accessibility tree й accessible name, навіть якщо значення неочевидне з HTML. Текстові locators зручні, доки labels, placeholders і переклади стабільні. Для багатомовного продукту або content, який окремо змінює контент-команда, стабільний data-testid часто кращий. Атрибути можуть рендеритися по-різному залежно від frontend framework, а generated classes та IDs змінюватися між builds, тому вибір залежить від реального контракту команди.

9:50

Feature flags та A/B experiments

B2C UI регулярно змінюється через experiments, feature flags і runtime configuration. Якщо тест не контролює variant через cookie, local storage, seed або інший узгоджений механізм, він може випадково бачити різні версії інтерфейсу й падати лише в частині запусків. Спочатку треба зробити variant детермінованим, а не перебирати дедалі складніші selectors.

12:00

Власні test IDs і внесок у frontend

Глибокі XPath не дають переваги в Playwright: потрібні parent/child operations уже є в locator API, а важливішу бізнес-логіку часто краще перевіряти нижче за UI. Команда автоматизації має домовитися з frontend developers про підтримку test attributes і, за можливості, додавати їх через звичайний pull request. Для публічного production DOM слід окремо оцінити, чи не спрощують описові IDs scraping або розкриття внутрішньої структури.

16:30

Читабельний CSS як практичний fallback

Якщо стабільного test ID або accessible name немає, припустимий короткий CSS selector через зрозумілий parent і тип дочірнього елемента. Locator повинен читатися; складний вираз варто сховати за змінною з предметною назвою. Не слід використовувати generated hashes, випадкові class names, positional indexes або повні DOM paths. Якщо ID має стабільний префікс і випадковий suffix, можна шукати за контрольованим частковим збігом.

21:30

AI як помічник для конкретного selector

HTML конкретного елемента можна передати моделі й попросити locator для Playwright або Selenium, уточнивши правила про allowed attributes і partial match. Це швидше за вивчення синтаксису складного XPath, але результат треба перевірити на сторінці. Ще надійніше — мати read access до frontend source, знайти компонент і додати стабільний атрибут у тому самому delivery process.

Джерела та додаткові матеріали