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

Java · Додаткові матеріали · 11:35–15:17

XPath для parent і ancestor

CSS зручно рухається вниз або між siblings, але в показаному сценарії не дає зручного способу піднятися до parent або далекого ancestor. XPath дозволяє знайти стабільний label, перейти до `parent` або вибрати `ancestor` з потрібним `id`, а вже в його межах знайти input. У фінальному прикладі так знаходиться hidden token input, після чого Selenide `getValue()` зчитує значення його `value` attribute.

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

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

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

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

Створення першого 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: очікування та мікрообгортки →

Java · Основний курс · 0:00–5:30

Навіщо потрібні колекції елементів

Колекція потрібна, коли один конкретний елемент складно знайти напряму або коли однакову перевірку треба виконати для групи елементів. Практичний підхід — знайти всі відповідні елементи, відфільтрувати їх за критерієм і далі працювати з результатом. Selenide за замовчуванням працює з колекцією динамічно: під час наступної перевірки він може знову виконати пошук за селектором, а не покладатися на раз назавжди зафіксований список DOM-вузлів. У демонстрації розглядаються варіанти пошуку всіх елементів, зокрема `$$` і `$$x`; для XPath є окремий короткий запис. Пошук колекції варто починати зі структури HTML: визначити контейнер і повторювані елементи на кшталт `ul` та `li`. Семантичні теги полегшують читання сторінки не лише тесту, а й accessibility-інструментам; якщо селектор неминуче неочевидний, йому дають предметну назву.

Selenide: колекції елементів і стан браузера →

Java · Основний курс · 2:40–6:30

Перенесення Selenide-тесту на чистий Selenium

Проєкт розділяється на окремі пакети для Selenide і Selenium, після чого той самий сценарій переписується через `driver.findElement(...)`, `By.cssSelector(...)`, `sendKeys(...)` і `click()`. Для текстового локатора, якому немає прямого аналога `By.text`, використовується XPath. Механічна заміна Selenide-викликів допомагає швидко отримати початковий варіант, але залишає багатослівний код і не додає очікувань. Тому наступний крок — явно визначити, коли елемент готовий до пошуку, перевірки або дії.

Selenium: очікування та мікрообгортки →

Java · Сесії: AMA та PMP · 5:30–8:20

Native tests і внесок у testability

Для важливих або частих перевірок радиться розглянути native інструменти: XCTest/XCUITest на iOS та Espresso або зручнішу обгортку Kakao на Android. Такі тести ближчі до застосунку, швидше виконуються і зрозуміліші mobile developers, які можуть запускати їх локально та в CI. Автоматизатор має покращувати testability самого продукту: додавати або просити додати стабільні `accessibilityIdentifier`, `accessibilityLabel`, Android `resource-id` і content descriptions. Native selectors, predicates і class chains зазвичай кращі за XPath. Якщо команда контролює source code, стабільний атрибут дешевший за постійне ускладнення locator-а в зовнішньому test suite.

Типи мобільних застосунків та мобільна автоматизація →

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

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

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

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

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

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

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

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

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 · Основний курс · 1:25:20–1:35:10

JUnit 5 extensions для driver lifecycle і login

Повторювані `@BeforeAll` і `@AfterAll` замінюються JUnit 5 extension. `WebDriverLifecycleExtension` реалізує `BeforeAllCallback` та `AfterAllCallback`: до тестів ініціалізує driver через provider, після тестів закриває його. Клас підключається через `@ExtendWith`, тому setup/teardown більше не дублюються в кожному test class. Окремий login extension виконує авторизацію перед тестовим класом. Такі розширення дозволяють комбінувати потрібні preconditions без спільного base class. Наприкінці до wrapper додається `findByText(...)`, який будує XPath і повертає той самий тип actions; тест запускається після виправлення синтаксису локатора.

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