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

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

Що змінилося після запису · 19:47

Selenium уже має network і console APIs

Фраза про історично складнішу роботу Selenium з console/network лишається корисним контекстом, але Selenium 4.46 документує WebDriver BiDi domains. Поточна різниця — інтегрованість trace/mocking workflow, а не абсолютна відсутність можливості.

Як працює проєктний білдер, ізоляція залежностей і впровадження нових інструментів →

Java · Сесії: AMA та PMP · 9:10–14:20

Дії, browser protocol і порівняння з WebDriver

[Дивитися з 09:10](https://www.youtube.com/watch?v=6QdvE9DHOIY&t=550s). Для `click`, `dblclick`, `fill`, evaluate та інших actions у команду входять target locator, parent frame і options. Browser-side automation layer виконує пошук у правильному контексті та повертає результат або error. На прикладі Chromium автор пояснює роль Chrome DevTools Protocol і показує інструмент командного рядка, який також керує browser через локальний service. Для порівняння Selenium client зазвичай спілкується з browser-specific WebDriver через W3C WebDriver protocol, а driver уже координує browser. В обох випадках test code не клікає DOM напряму: між ним і browser є protocol та процес, що виконує команди.

Як Playwright взаємодіє з браузером через протокол →

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

Selenium, WebDriver і відмінність від Selenide

Selenium представлено як велику бібліотеку для керування браузером, до екосистеми якої належать WebDriver, Selenium Manager і Selenium IDE. У попередньому Selenide-тесті ініціалізація та закриття драйвера, очікування видимості й повторні спроби приховані за компактним API. У чистому Selenium ці кроки потрібно описувати явно. Для першого тесту створюється `ChromeDriver`, відкривається сторінка, а в кінці викликається `driver.quit()`. Якщо не закрити драйвер, запущений браузер і пов'язані процеси можуть залишитися в оперативній пам'яті.

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

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

WebDriver і двостороння модель Playwright

Selenium виконує команди через WebDriver: тест звертається до драйвера HTTP-запитами, а драйвер керує браузером. Перевірки стану та explicit waits багаторазово опитують браузер, тому на віддаленому запуску через BrowserStack або іншу інфраструктуру network latency відчутно сповільнює тести й змушує змінювати polling interval. Playwright підтримує постійний двосторонній зв'язок із браузером і отримує результат виконаної команди через WebSocket. У відео це подається як причина меншої кількості мережевих затримок, кращої поведінки на remote execution і можливості працювати з Chromium, Firefox та WebKit через спільний API.

Playwright для Java: основи та поглиблення →

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

Навіщо потрібен власний врапер і де він стає технічним боргом

Чистий Selenium API придатний до роботи, але тест швидко стає багатослівним. На проєктах це часто приводить до самописних фреймворків, у яких різні Page Objects використовують різні реалізації кліку, пошуку й очікувань. Без одного спільного контракту така обгортка накопичує дублювання та ускладнює супровід. Принципи Selenium однакові для Java, Python, C#, Ruby та інших bindings: клієнт надсилає команди WebDriver, драйвер взаємодіє з браузером. Тому важливіше розуміти модель драйвера, waits, локатори й test runner, ніж запам'ятовувати лише синтаксис однієї мови.

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

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

OOP, патерни й ізоляція browser state

На базовому рівні потрібно розуміти primitives/value types, reference/object types, класи, об'єкти та принципи OOP. Із прикладних патернів найчастіше зустрічається Page Object; корисно впізнавати Singleton, Builder, Facade та інші рішення, але не впроваджувати їх без проблеми, яку вони реально спрощують. Page Factory виник навколо старих Selenium-підходів із lazy initialization елементів. Для сучасного Selenium або Playwright його не варто застосовувати за інерцією. У багатопоточному WebDriver framework кожен тест/worker повинен мати власний browser context або driver; спільний mutable driver спричиняє взаємний вплив тестів.

Що має вміти та знати мідл автоматизатор →

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

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

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

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

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

Page Object і проблема передавання драйвера

Login-сценарій переноситься до `LoginPage`: тест передає login і password, а Page Object виконує технічні дії з полями та кнопкою. Поширений варіант — передавати `WebDriver` у constructor кожного Page Object, але це повторює однакову залежність у тестах і сторінках. Для навчального врапера обирається централізований provider, з якого Page Objects отримуватимуть поточний драйвер без constructor plumbing. Водночас пакети розділяються за призначенням: web pages залишаються окремо від common-коду обгортки та від можливих API tests.

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

Java · Основний курс · 30:30–34:30

Потокобезпечний `WebDriverProvider` через `ThreadLocal`

`WebDriverProvider` зберігає driver instance у `ThreadLocal`. Test runner створює потоки для запусків, а provider повертає драйвер, пов'язаний із поточним thread id: якщо його ще немає, створюється `ChromeDriver`; якщо є — повторно використовується поточний instance. Окремий метод закриття викликає `quit()` і видаляє значення з `ThreadLocal`. Це готує основу до паралельних запусків: тести в різних потоках не повинні ділити один браузерний session instance.

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

Java · Основний курс · 53:39–55:35

`WebDriverConditions` і перевірки URL

Умови WebDriver дозволяють перевіряти URL, title, cookies та інший стан браузера. Автор застерігає від беззмістовної перевірки випадкового фрагмента URL: вона подібна до перевірки елемента лише за індексом і не доводить, що користувач отримав потрібний результат. URL-condition виправданий для redirects або query parameters із предметним значенням — наприклад, коли треба підтвердити джерело переходу з Google, Hotline, соціальної мережі чи іншого метапошуку. В інших випадках краще чекати спостережуваний стан сторінки через предметний `isLoaded`-метод.

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

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

Очікування перед `click` і `sendKeys`

Перед `click()` і `sendKeys(...)` wrapper викликає visibility wait для збереженого `By`, а потім виконує дію. Окремо пояснюється різниця між visible і enabled: видимий елемент має координати та розмір, але браузер усе ще може вважати його непридатним до взаємодії. Selenium представляє знайдений вузол через element id, який WebDriver використовує в наступних командах. Якщо DOM замінить вузол між перевіркою стану та дією, посилання може застаріти; саме цей проміжок пояснює частину нестабільних `StaleElementReferenceException`.

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