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

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

`WebDriverWait`, `FluentWait` і polling interval

Окремий клас waits створює `WebDriverWait` для поточного драйвера з timeout 10 секунд. `pollingEvery(Duration.ofMillis(100))` означає, що до завершення timeout умова перевірятиметься приблизно кожні 100 мс. `WebDriverWait` наслідує `FluentWait`, тому обидва мають спільну основу: timeout, polling і можливість ігнорувати визначені exceptions. Різниця в API не заважає передати до `until` власну lambda або `ExpectedCondition`, яка перевіряє кілька властивостей за один виклик.

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

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

Життєвий цикл драйвера в JUnit 5

Ініціалізація `WebDriver` і `WebDriverWait` переноситься з тіла тесту до lifecycle methods. `@BeforeEach` створює новий стан перед кожним тестом, тоді як `@BeforeAll` дає змогу один раз підготувати спільний драйвер для тестів класу. Для стандартного `@BeforeAll` метод і пов'язані поля робляться `static`. Закриття браузера переноситься до `@AfterAll`. Під час демонстрації зайва ініціалізація створює кілька драйверів, тому setup спрощується до одного місця, а teardown залишається обов'язковим. `WebDriverWait` має бути побудований на тому самому instance драйвера, з яким працює тест.

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

Java · Основний курс · 13:50–17:00

`WebElement` проти `By` усередині очікування

Перший запуск падає з `NoSuchElementException`, хоча елемент згодом з'являється на сторінці. Причина — `findElement` виконується ще до входу в `wait.until(...)`: Selenium спочатку намагається передати готовий `WebElement`, і очікування не отримує можливості повторювати пошук. Коли в `ExpectedConditions` передається `By`, локатор залишається всередині циклу очікування. Тоді `WebDriverWait` протягом заданого timeout повторно перевіряє, чи знайдений елемент і чи містить він потрібний текст. Для динамічної сторінки варіанти на кшталт `visibilityOfElementLocated(By)` і `textToBePresentInElementLocated(By, text)` гнучкіші за умови, які приймають уже знайдений `WebElement`.

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

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:35:10–1:41:30

Діагностика waits і власні `ExpectedCondition`

`WebDriverWait` можна доповнити власним timeout message і переліком exceptions, які ігноруються під час polling. Як приклад розглядається `StaleElementReferenceException`: якщо DOM оновився між двома перевірками, wait може повторити умову замість негайного падіння. Ігнорувати всі exceptions без розбору не радять — перелік має відповідати очікуваним перехідним станам. Власна умова може через lambda знайти елемент і послідовно перевірити `isDisplayed()`, `isEnabled()` та текст. Її текстове представлення або окремий message потрапить до timeout diagnostics. Для складної перевірки це дає контроль над поведінкою, але готові `ExpectedConditions` варто перевикористовувати, доки вони виражають потрібний контракт.

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