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

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

Практика · 5:30

Вибір mobile automation strategy

Оберіть один власний mobile flow і визначте, що має перевірятися на backend, native component та system E2E levels.
Складіть мінімальну device matrix із поясненням кожного device та OS version.
Назвіть accessibility attributes, яких бракує для стабільних selectors.
Односторінкова strategy з test levels, device matrix і переліком testability changes.

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

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 · Додаткові матеріали · 29:23–35:49

Debug mode, selectors і реальна готовність сторінки

Замість довгого `sleep` тест запускається в debug mode з breakpoint, щоб дослідити DOM у потрібному стані. Автор перевіряє `h2`, link з текстом `Read Me` та вкладені елементи, уточнюючи selector до єдиного збігу. Важливе спостереження: контент або DOM-елемент може з’явитися раніше, ніж зміна стане помітною користувачу, тому умова завантаження має відповідати потрібному business state, а не випадковому швидкому елементу.

Маленький рефакторинг і тестові дані у Java →

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

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

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

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

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

Пошук за HTML tag

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

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

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

`id`, attributes і частковий збіг

`#search` знаходить елемент з `id="search"`. Довільний attribute записується у квадратних дужках: `[name='viewport']`. Коли значення має стабільну частину та змінний hash, оператор `*=` дає пошук за підрядком. Це корисно для generated attributes у frontend frameworks, але стабільна частина має бути досить специфічною, щоб не отримати кілька збігів.

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

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

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

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

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

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 · Додаткові матеріали · 7:55–9:40

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

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

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

Java · Сесії: 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-проєкту →

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

Lifecycle, declaration, initialization і live coding

Варто розуміти порядок, у якому test runner завантажує модулі, створює suite/test fixtures, запускає setup, test і teardown. Declaration задає ім'я та тип, assignment присвоює значення, а runtime initialization створює фактичний стан під час виконання програми. Точні терміни залежать від мови, але практичне питання однакове: коли ресурс уже існує й хто ним володіє. На співбесіді можуть попросити пояснити різницю між class та object, відрефакторити тест або написати надійний locator. Потрібно знати CSS/XPath настільки, щоб читати старий код, і віддавати перевагу user-facing locator API Playwright, коли семантична роль або label точніше виражає контракт.

Що має вміти та знати мідл автоматизатор →
Запитати в чаті про «selectors» →