← Java

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

0:00

Мета курсу та підготовка інструментів

Курс орієнтований на кодову автоматизацію, а не на record/playback чи no-code рішення. Як цільову систему використано Testomat.io: курс охоплюватиме UI та окремі API-операції. Автор рекомендує встановити JetBrains Aqua, а Java/JDK завантажити безпосередньо через IDE. Gradle або Maven знадобляться для керування збіркою, залежностями та консольного запуску тестів.

3:15

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

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

6:20

Ручний прохід тестового сценарію

Сценарій складається з авторизації, пошуку проєкту Manufacture Lite, переходу до нього та перевірки заголовка. Під час ручного проходу перевіряється не лише наявність атрибутів, а й фактична клікабельна область, поведінка анімацій та затримки автодоповнення. Якщо в продукті бракує стабільних локаторів, варто домовитися з розробниками про передбачувані data-testid або аналогічні атрибути.

11:20

Створення Java-проєкту в Aqua

У Aqua створюється Selenium-проєкт з Java, Gradle і JUnit 5. group використовується як простір імен, а artifact — як назва конкретного проєкту. Для курсу обрано JDK 17; автор демонструє Amazon Corretto, але радить узгоджувати дистрибутив з проєктною командою. До залежностей додаються Selenium і Selenide; після створення проєкту треба дочекатися завершення Gradle sync.

18:10

Структура Gradle-проєкту та Java-класу

build.gradle описує збірку та залежності, Gradle Wrapper дає відтворюваний запуск, а в src створюються source sets main і test. Службова логіка зберігатиметься в src/main/java, а тести — в src/test/java. Базова ієрархія Java-коду: package містить class, class містить fields і methods, а локальні variables можуть жити всередині methods. Назва public class має збігатися з іменем файлу; безпечне перейменування робиться через IDE refactoring.

25:35

Перший JUnit 5 test method

Тест описується як method всередині class і позначається JUnit 5 annotation @Test. Важливо вибрати імпорт саме з org.junit.jupiter.api, бо IDE може запропонувати однаково названі типи з інших package. Java-класи називаються у PascalCase, methods — у camelCase; блоки обмежуються фігурними дужками, а statements завершуються ;. IDE formatting і optimize imports прибирають механічні помилки, але не замінюють розуміння структури.

32:30

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

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

40:15

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

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

49:55

Умови та перевірки в Selenide

Очікуваний стан виражається через shouldBe(...) або shouldHave(...) і Condition, наприклад visible чи text(...). Текстовий локатор створюється через Selectors.byText(...), але пошук має стосуватися видимого DOM-тексту, а не вмісту script чи невидимих атрибутів. Static imports для Selenide, Selectors і Condition прибирають повторення назв class, зберігаючи читабельний DSL.

56:30

Запуск, діагностика та коректні очікування

Перший запуск показує проблему з переходом між сторінками. Тимчасовий sleep(10000) допомагає підтвердити, що причина — асинхронне завантаження, але не має залишатися у фінальному тесті. Замість фіксованої затримки тест очікує конкретний елемент чи текст нової сторінки. Перевірка лише URL недостатня: адреса може змінитися раніше, ніж DOM стане готовим.

1:03:35

Рефакторинг, найменування та домашня практика

Автор починає з одного прямого test method, не створючи Page Object і додаткові class до появи реальної потреби. Назва method має описувати тестовий сценарій, а class — сторінку, feature, test suite або роль, яку він покриває. Невикористані імпорти прибираються через optimize imports. Домашнє завдання — відтворити короткий сценарій з авторизацією, дією на наступній сторінці та перевіркою результату.