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

Java · Основний курс · 21:19–25:07

`filter`, `find` і перенесення даних із UI в Java

`filter` залишає в результаті всі елементи, які відповідають `Condition`, і повертає нову `ElementsCollection`. `find` шукає перший відповідний елемент та повертає `SelenideElement`; в API також показані парні варіанти `filterBy` і `findBy`. Якщо на сторінці треба перевірити десятки або сотні значень, багато окремих браузерних звернень можуть стати найдорожчою частиною тесту. У такому випадку доцільно один раз отримати потрібні тексти зі сторінки в Java collection і виконати решту перевірок у Java. Для одного елемента така оптимізація майже не дає користі й лише ускладнює тест.

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

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 · Сесії: AMA та PMP · 23:19–33:00

REST і GraphQL уже дають словник для API automation

У REST структура починається з resources та HTTP methods. `Pet`, `Store` або `User` задають назви controllers/clients, а дії на кшталт create, update, delete чи find by ID — назви методів. Request і response models корисно розділяти, бо server response часто містить поля, яких не було у request. У GraphQL треба повторювати назви queries, mutations, inputs і types зі schema. Code generation може дати готові типи, але базове правило те саме: не створювати паралельний словник там, де backend contract уже має точні терміни. Read-only доступ до frontend і backend repositories допомагає швидше зрозуміти систему й підтримувати automation разом зі змінами продукту.

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

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

API очікувань для visibility, invisibility і text

У класі waits додаються методи для очікування видимості, невидимості та тексту. Негативну умову можна виразити через `not(...)`, а готові комбінації також доступні через `and(...)` та `or(...)`. Перед вибором методу відкривається реалізація `ExpectedConditions`, щоб перевірити, чи він приймає `By` або `WebElement` і яку саме умову оцінює. `ElementActions.waitFor()` повертає об'єкт waits для поточної цілі. Це дозволяє будувати виклики на кшталт `find(...).waitFor().visibility()` або очікувати потрібний текст, не розміщуючи `WebDriverWait` безпосередньо в тесті.

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

Java · Основний курс · 1:06:30–1:14:30

Лінивий пошук як основа стабільного врапера

Тест знову падає до виконання text wait, бо `ElementActions` отримує готовий `WebElement`: eager пошук завершується помилкою раніше, ніж запускається очікування. Додавання visibility wait безпосередньо до `find` теж створює суперечність для сценарію, який навмисно очікує invisibility. Рішення — зберігати в `ElementActions` не `WebElement`, а `By`. Реальний пошук виконується лише тоді, коли потрібна дія або конкретна умова. Так один і той самий locator можна використати для visibility, invisibility чи text check, не нав'язуючи стан на етапі створення wrapper object.

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