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

Терміни, нюанси та джерела

Приклад коду · 30:00

Явне очікування видимого елемента

Locator передається всередину expected condition, тому кожна спроба polling може повторно знайти актуальний DOM-вузол.

Повертається видимий WebElement або після 10 секунд виникає TimeoutException.

1. Selenium початок, основи, фікстури →

Python мануфактура · Програма курсу · 10:03–12:20

Контрольовані `data-testid` та інші атрибути

Найстабільніший для команди варіант — атрибут, значення якого тестувальники та розробники свідомо контролюють, наприклад `data-testid`. Його можна додати у frontend-компонент і зберігати як частину контракту тестованості. Так само можуть використовуватися стабільні `id`, `name`, `aria-label` чи інші атрибути. Головний критерій автора — не назва механізму сама по собі, а можливість команди контролювати його та домовитися, коли він змінюється.

3. Селектори та пошук елементів →

Python мануфактура · Сесії: AMA та PMP · 9:04–14:29

Коли UI-фрагмент стає окремим компонентом

Popup, який використовується на кількох сторінках, є природним кандидатом на окремий object. Назву варто шукати в його heading, `data-testid`, class або іншому атрибуті найближчого контейнера. Так automation-модель повторює структуру продукту й полегшує пошук коду. Якщо test environments обфускують усі стабільні назви, це варто обговорити з frontend-командою: production може мати обфускацію, але dev/stage потребують передбачуваного test contract. Водночас не можна прив’язувати неймінг чи selectors до випадкових inline styles або кольорів.

Неймінг та структура automation-проєкту →

Python мануфактура · Програма курсу · 20:00–24:00

Стратегії селекторів і контроль стану

CSS-селектори залишаються основним варіантом. XPath потрібен у Selenium для окремих випадків пошуку за текстом або зв’язком parent/child, але швидко ускладнюється: видимий текст може бути розбитий між кількома DOM-вузлами. Стійкі `data-testid`, `id` або `name` краще узгодити з frontend-командою, ніж будувати крихкий XPath навколо layout. Це не «деталь тестів», а тестований контракт між UI та автоматизацією. Рекомендований у відео компроміс: Page Object зберігає locator tuples, а спільні `click`/`type` helpers автоматично чекають релевантний стан. Поряд із цим кожен тест повинен відновлювати потрібний стан, бо локальний success не гарантує стабільність у повному suite.

2. Selenium організація PageObject's та Очікувань →

Python мануфактура · Сесії: AMA та PMP · 4:00–9:50

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

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

Пріоритети селекторів та їхня надійність →

Python мануфактура · Програма курсу · 13:10–15:35

Офіційний Playwright Codegen

Playwright має власний Test Generator, який запускається з термінала: ```bash playwright codegen https://testomat.io ``` Відкриваються окремий браузер і вікно Playwright Inspector. У меню target потрібно обрати Python і pytest. Після цього навігація, заповнення полів та кліки записуються як Python-код. Офіційний Codegen стабільніший за перевірені сторонні extensions, але його локатори теж не завжди оптимальні. Наприклад, вони можуть бути задовгими або не враховувати доменні домовленості про `data-testid`.

4. Playwright плагіни та codegen →
Запитати в чаті про «data-testid» →