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

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

Практика · 0:00

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

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

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

Java · Додаткові матеріали · 3:15–6:20

HTML-структура та основи селекторів

Перед автоматизацією сценарій треба пройти вручну з відкритими DevTools. HTML — це мова розмітки, де документ складається з елементів, тегів, атрибутів і їхніх значень. Для пошуку елементів використовуються `id`, `name`, стабільні `data-*` атрибути, CSS або XPath. У відео перевага надається компактним CSS-селекторам; XPath залишається для випадків, де CSS не виражає потрібний зв’язок.

Створення першого Java-проєкту та тесту →

Java · Додаткові матеріали · 0:00–2:20

Пошук за HTML tag

Автор представляє односторінкову CSS/XPath шпаргалку для подальшого доповнення. Найпростіший CSS-селектор — ім’я tag, наприклад `div`, `script`, `a`, `li` або `form`. Такий запит знаходить усі елементи відповідного tag і зазвичай потребує додаткового звуження. У DevTools search треба відрізняти результати CSS-запиту від звичайного текстового пошуку.

CSS і XPath: пошук елементів →

Java · Сесії: AMA та PMP · 16:30–21:30

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

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

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

Java · Основний курс · 1:00:02–1:05:26

Уточнення locator-ів і складні CSS-можливості

Для assertions слід використовувати API, що повертає `Locator`: `locator(...)`, `getByRole(...)`, `getByText(...)` та споріднені методи. У документації Playwright пріоритет надається user-facing locator-ам, але відео рекомендує не перетворювати це на механічне правило й підбирати locator за реальним DOM та потребами команди. Playwright розширює CSS-пошук перевірками тексту, видимості й відносного розташування, однак надто складні конструкції та XPath ускладнюють підтримку. Якщо стабільного сигналу немає, краще домовитися з розробниками про data attribute; `getByTestId` фактично є зручною обгорткою над таким контрактом.

Playwright для Java: основи та поглиблення →

Java · Додаткові матеріали · 4:45–7:55

Classes і комбінування ознак

Елемент за class шукається через `.class-name` або attribute selector на кшталт `[class*='class-name']`. Два classes одного елемента записуються без пробілу: `.first.second`. Tag та `id` або attribute також можна комбінувати, наприклад `turbo-frame#global_search_results`. Якщо attribute value містить пробіл або спеціальні символи, його треба брати в лапки. У Java-рядку single quotes всередині CSS зменшують кількість escaping.

CSS і XPath: пошук елементів →

Java · Додаткові матеріали · 7:55–9:40

Descendants, direct children і кілька attributes

Пробіл між двома CSS-селекторами знаходить descendant на будь-якій глибині. `>` обмежує пошук direct child на наступному рівні DOM. Кілька attributes одного елемента можна послідовно додати без пробілів, щоб звузити результат до елемента, який одночасно відповідає всім умовам.

CSS і XPath: пошук елементів →

Java · Основний курс · 25:15–31:44

Стратегії пошуку та accessibility locators

Playwright пропонує `getByRole`, `getByLabel`, `getByText`, `getByPlaceholder` та інші user-facing locator-и. `getByRole` спирається на accessibility semantics і допомагає перевіряти, чи інтерфейс коректно описує кнопки, поля та таблиці для screen reader; особливо зручним такий пошук може бути для рядків і колонок таблиці. Автор водночас застерігає, що role-based locator-и іноді складніше читати й діагностувати команді. Для більшості проєктів він радить обирати найпростіший стабільний CSS selector або узгоджений data attribute, а accessibility locator використовувати там, де він справді дає читабельний і надійний контракт. API портів Playwright загалом однаковий у Java, Python, C# і TypeScript. Практична перевага TypeScript-версії в тому, що власний Playwright Test runner автоматично надає готовий `Page`; у Java lifecycle потрібно організувати через JUnit або власну обгортку.

Playwright для Java: основи та поглиблення →

Java · Додаткові матеріали · 32:30–40:15

Відкриття сторінки та пошук елемента в Selenide

Selenide підключається як стороння Java-бібліотека. Сторінка відкривається через `Selenide.open(...)`, а елемент отримується через `$` і CSS-селектор. Для `id` застосовується `#value`; якщо на сторінці є дублікати для desktop і mobile layout, локатор звужується через контейнер. Підказки IDE допомагають знайти доступні methods і побачити їхні parameter types; важливо обирати коректний package, а не перший збіг за назвою.

Створення першого Java-проєкту та тесту →

Java · Додаткові матеріали · 40:15–49:55

Введення даних і кліки

Для текстового поля Selenide може одразу викликати `setValue(...)`: окремий попередній click зазвичай не потрібен. CSS-селектори та текстові значення передаються як Java `String` у подвійних лапках. Для checkbox і submit button застосовується `click()`, а атрибут можна вибрати через `[name='value']`. DevTools має підтвердити, що селектор знаходить саме очікуваний елемент і бажано лише один раз.

Створення першого Java-проєкту та тесту →

Java · Основний курс · 42:30–50:30

Єдиний рядковий локатор для CSS і XPath

Метод `find(String locator)` визначає тип локатора: рядок, що починається зі `/`, перетворюється на `By.xpath(...)`, інакше використовується `By.cssSelector(...)`. У відео це реалізовано компактним ternary operator; також показано еквівалент через `if/else` і обговорено компроміс між короткістю та читабельністю. `find` повертає `ElementActions`, а сам driver береться з `WebDriverProvider`. Після заміни прямих `driver.findElement(...)` тест стає компактнішим, але зберігає проблему: пошук усе ще може виконатися до того, як елемент стане видимим або доступним для дії.

Selenium: очікування та мікрообгортки →
Запитати в чаті про «css» →