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

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

Практика · 30:00

Перевірити value замість text content

Заповніть input із formatter або mask.
Порівняйте text_content() та input_value().
Зафіксуйте кінцевий contract через to_have_value().
Assertion, який перевіряє саме відформатоване input value.

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

Термін · 15:35

Pydantic strict mode

За замовчуванням Pydantic може перетворювати вхідні значення до потрібного типу. Strict mode зменшує coercion і повертає validation error, коли Python input має неправильний тип; правила для JSON input можуть відрізнятися для окремих типів.

Міграція бази даних і тестування даних →

Приклад коду · 2:55

Окремий context для Free-користувача

Fixture створює isolated BrowserContext із наперед підготовленим Free-state; Enterprise-state має бути окремою fixture або parameterized input із чіткою очікуваною роллю.

Тест стартує у визначеному Free-контексті без умовного розгалуження за випадковим UI-станом.

На сторінці може бути різний контент — що робити? →

Java · Сесії: AMA та PMP · 25:45–30:00

`fill()` проти посимвольного введення

[Дивитися з 25:45](https://www.youtube.com/watch?v=6QdvE9DHOIY&t=1545s). `fill()` фокусує поле, замінює значення та генерує input-related event. Це рекомендований і швидкий варіант для звичайних text fields. Посимвольне `pressSequentially()` потрібне лише тоді, коли application реагує на окремі `keydown`/`keypress`/`input`/`keyup`: autocomplete після перших символів, input mask, formatter номера телефону або custom keyboard handler. Практичний сценарій для autocomplete: ввести мінімальну кількість символів, дочекатися suggestion list, вибрати потрібний option і перевірити кінцевий state. Посимвольне введення не повинно ставати глобальним workaround для слабких очікувань, бо воно робить suite повільнішим.

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

Java · Сесії: AMA та PMP · 30:00–34:20

Значення input не дорівнює text content

[Дивитися з 30:00](https://www.youtube.com/watch?v=6QdvE9DHOIY&t=1800s). Текст, який користувач бачить усередині input, зберігається як `value`, а не як дочірній text node. Тому `textContent()` або `toHaveText()` може повернути порожнє значення навіть тоді, коли поле візуально заповнене. Для form control треба використовувати `inputValue()` або assertion `toHaveValue()`. Pattern/regular expression дозволяє перевірити форматоване значення без ручної конкатенації. Така перевірка особливо важлива після autocomplete або mask, де DOM value може відрізнятися від рядка, надісланого тестом.

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

Java · Додаткові матеріали · 11:35–15:17

XPath для parent і ancestor

CSS зручно рухається вниз або між siblings, але в показаному сценарії не дає зручного способу піднятися до parent або далекого ancestor. XPath дозволяє знайти стабільний label, перейти до `parent` або вибрати `ancestor` з потрібним `id`, а вже в його межах знайти input. У фінальному прикладі так знаходиться hidden token input, після чого Selenide `getValue()` зчитує значення його `value` attribute.

CSS і XPath: пошук елементів →

Java · Сесії: AMA та PMP · 3:09–4:12

Готовність складених і iframe-елементів

Payment page часто збирається кількома асинхронними етапами: зникає загальний loader, з’являється billing address, потім завантажуються поля платіжного iframe. Формальна поява контейнера ще не означає, що користувач може вводити дані. Тому `isLoaded` повинен чекати саме готових полів або іншого мінімального набору елементів, потрібних наступному кроку сценарію.

Що має описувати isLoaded →

Java · Сесії: AMA та PMP · 6:05–9:10

SAST, DAST і спеціалізовані scanners

SAST аналізує codebase, configuration та infrastructure definitions без запуску повного user flow. До scope можуть входити source code, dependencies, YAML, Docker та Terraform files. DAST працює проти запущеного застосунку: генерує requests, змінює parameters, headers, authentication data й шукає небезпечну runtime behavior. OpenAPI specification може бути input для API security scanner-а. Окремі tools аналізують network traffic або вразливості, характерні для конкретної мови, cloud platform, protocol чи IoT stack. Тому pentesting швидко розгалужується на спеціалізації, а не зводиться до ручного перебору requests у Postman.

Перехід у пентестинг: що важливо →

Java · Додаткові матеріали · 9:40–11:35

Sibling combinator

Комбінатор `+` вибирає adjacent sibling: елемент, який розташований одразу після іншого елемента на тому самому DOM-рівні. Це дозволяє знайти input або container відносно стабільного label. Такий локатор залежить від порядку в DOM, тому перед використанням треба перевірити структуру, а не лише візуальне розташування.

CSS і XPath: пошук елементів →

Java · Advanced: API-автоматизація · 10:00–20:00

Gradle task: input, output і generator config

В build configuration задаються specification URL/file, output directory, generator/language, package names і config options. Окрема task спочатку отримує spec, потім генерує sources. Вихід кладеться в `build/`, а не редагується вручну. Так generator залишається build product, а не другим source of truth.

Кодогенерація через OpenAPI Generator →

Java · Сесії: AMA та PMP · 12:45–15:55

Чому scripting залишається обов’язковим

Pentester автоматизує запуск tools, підготовку input, аналіз результатів, відтворення знахідок і створення reports. Для цього потрібні базові programming concepts: variables, data structures, files, network requests, error handling і передача даних між process-ами. Мова залежить від задачі: Shell підходить для orchestration, TypeScript або Python — для швидких API scripts, Go часто зустрічається в infrastructure та security tooling. Low-code може пришвидшити старт, але на співбесіді й у production роботі все одно потрібно розуміти, що саме виконує generated script.

Перехід у пентестинг: що важливо →

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

Actionability і правильна область кліку

[Дивитися з 14:20](https://www.youtube.com/watch?v=6QdvE9DHOIY&t=860s). Перед дією Playwright перевіряє її передумови. Для `locator.click()` це, зокрема, strict resolution до одного елемента, visibility, stability, здатність отримувати pointer events і enabled state. Якщо умови не виконуються до завершення timeout, action завершується помилкою замість випадкового кліку. Візуальний текст усередині button не завжди є правильним click target: event listener може бути на батьківському element, а вкладений `span` — лише оформленням. Через це семантичний locator на кшталт `getByRole('button', { name: ... })` часто стабільніший за пошук найглибшого text node. Велика активна область також краща для користувача й доступності. Вибір між `click()` і touch-oriented `tap()` має залежати від реального input mode та context configuration, а не лише від розміру viewport.

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

Java · Advanced: API-автоматизація · 1:30:00–1:40:00

Assertions, status codes і реальний debugging

Після create виконується `GET` і response data порівнюються з generated input. Помилки `400`/`500` розбираються через actual request/response, а не через здогад. Відео навмисно залишає неідеальний demo API і live debugging. Це добре показує межу між client defect, unstable shared test API і real server defect.

API: що тестувати та як написати перший тест →
Запитати в чаті про «input» →