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

Design Patterns для автоматизаторів · 0:00–6:00

Чому raw Selenium погано масштабується

Raw Selenium створює повтори `findElement`, waits і JavaScript executor workarounds, тому починати радять хоча б з існуючого wrapper на кшталт Selenide. Змішування implicit та explicit waits додатково робить runtime і причину затримки непередбачуваними. На CI test code, Selenium Server і browser можуть працювати на різних machines. Кожна remote команда додає network latency та навантаження Grid/Selenoid, тому велика кількість дрібних звернень до browser різко збільшує загальний час.

Playwright Java, пишемо тести та робимо Selenide на мінімалках →

Design Patterns для автоматизаторів · 2:01–9:21

Прямий Selenide-сценарій і перевірка результату дій

Перший тест відкриває головну сторінку, шукає товар, переходить на сторінку товару, звіряє назву, додає товар до кошика й перевіряє його вміст. Під час ручного проходження сценарію автор перевіряє кількість збігів селектора та враховує можливу одночасну desktop/mobile-розмітку. Другий сценарій додає товар прямо зі сторінки результатів пошуку. Демонстрація показує, що слабка перевірка тексту може дати хибнопозитивний результат; після переходу на exact text тест очікувано падає. Тестові дані варто винести в одну змінну, щоб назва товару не розходилася між кроками.

1. Патерни проєктування для UI тестів (перезапис) →

Design Patterns для автоматизаторів · 31:00–40:00

Assertions і незручність сирого fluent API

Playwright Java розділяє locator actions і assertions: для перевірки потрібно окремо передавати locator в assertion API. Після action не завжди можна продовжити читабельний chain на тому самому object, тому Page Object наповнюється повторними locator calls. Автор прагне до Selenide-подібного стилю: знайти element, викликати `shouldBe`/`shouldHave`, виконати `click`, `setValue` або `press`, читаючи chain зліва направо. Замість великого framework потрібен вузький wrapper над уже наявними Playwright capabilities.

Playwright Java, пишемо тести та робимо Selenide на мінімалках →

Design Patterns для автоматизаторів · 1:05:00–1:13:33

DOM tree, CSS і XPath

Пошук елемента має слідувати DOM tree: спочатку стабільний parent/container, потім потрібний descendant або text filter. Playwright і Selenide вміють фільтрувати locator за текстом, тому довгий XPath часто не потрібний. Playwright `locator` сам визначає XPath за `//`, але автор радить використовувати CSS, attributes і можливості бібліотеки. Recorder/debugger можуть запропонувати selector, однак його стабільність усе одно оцінює команда.

Playwright Java, пишемо тести та робимо Selenide на мінімалках →

Design Patterns для автоматизаторів · 1:20:00–1:30:00

Поступова міграція з Selenium/Selenide

Wrapper навмисно використовує Selenide-подібні method names, щоб existing Page Objects мігрували через import replacement і мінімальні structural changes. Selenium та Playwright tests можуть тимчасово жити в одному repository й запускатися різними commands. IntelliJ Structural Search and Replace або regex replacement допомагають перетворити `@FindBy`, Page Factory і повторювані `driver.findElement` patterns. Якщо old suite непослідовний, безпечніше переписувати test лише коли його торкається зміна, а не робити ризиковий big-bang rewrite.

Playwright Java, пишемо тести та робимо Selenide на мінімалках →

Design Patterns для автоматизаторів · 1:46:30–1:50:36

Підсумок патернів і подальші теми

Підсумкова структура розділяє Page Object на сторінки й компоненти, підключає спільні компоненти композицією, передає робочі дані як State, створює їх через Factory Method і перевіряє готовність через Loadable Component. Fluent-виклики роблять сценарій коротшим, якщо не приховують переходи між контекстами, а helpers, decorators і utilities залишаються вузькими за відповідальністю. Автор анонсує окремий розбір Playwright-обгортки з Singleton, Observable і Command: один інстанс для тестів, очікування стану UI та об'єкти команд/conditions на зразок Selenide. Відео завершується нагадуванням структурувати тестовий проєкт поступово й подякою за збір коштів для військових.

1. Патерни проєктування для UI тестів (перезапис) →
Запитати в чаті про «selenide» →