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

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

Практика · 25:45

Обрати API для autocomplete

Знайдіть поле, де suggestion list з’являється після окремих keyboard events.
Порівняйте fill() і press_sequentially() на тому самому observable result.
Залиште повільніший API лише якщо test доводить потребу в keyboard events.
Два test runs і висновок, який event contract потребує application.

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

Python мануфактура · Сесії: 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 взаємодіє з браузером через протокол →

Python мануфактура · Програма курсу · 8:00–11:00

Перехід від dictionary до атрибутів

Після зміни типу старе звернення `config["email"]` падає з `TypeError: object is not subscriptable`. Це очікуваний сигнал: dataclass використовує атрибути, тому код змінюється на `config.email`, `config.password`, `config.login_url`. Результат — автодоповнення, безпечніше перейменування через IDE й читабельніший контракт fixture. Type hints не роблять Python статично типізованим самі по собі, але дають IDE та аналізаторам достатньо інформації, щоб знаходити частину помилок раніше.

3. Рефакторинг: Faker, DataClass, Fixtures →

Python мануфактура · Програма курсу · 9:00–12:00

Типи параметрів і повернення

Сигнатура на кшталт `def hello_to(name: str) -> str` описує вхід і результат. IDE після крапки може підказати методи `str`, а reviewer одразу бачить контракт функції. Важливе уточнення: type hints за замовчуванням не перевіряються інтерпретатором як жорстке обмеження й не є оптимізацією швидкодії. Їхню коректність перевіряють IDE, type checker і тести.

4. Типізація даних (str, int, float, bool) →

Python мануфактура · Програма курсу · 10:03–13:12

Перехід на сторінку та перша перевірка

Тест відкриває сайт через `page.goto(...)`, після чого `expect(page).to_have_title(...)` перевіряє заголовок вкладки. `expect` виконує очікування протягом заданого тайм-ауту, тому така перевірка стійкіша за миттєве порівняння значень. ```python def test_open_home_page(page: Page): page.goto("https://testomat.io") expect(page).to_have_title("очікуваний заголовок") ``` Автодоповнення PyCharm шукає методи не лише за початком, а й за частиною назви. Методи з подвійними підкресленнями є службовими й у звичайному тесті не потрібні.

2. Перший автотест на Python з Playwright →

Python мануфактура · Програма курсу · 17:25–23:40

Типізована відповідь замість raw dictionary

Raw `dict` змушує пам’ятати рядкові ключі й не дає надійного autocomplete. Response перетворюється на невелику `Project` dataclass із фактично потрібними полями, насамперед `id` та attributes. Десеріалізація має відповідати реальній response schema. Не потрібно моделювати всі поля API «про запас»: для поточного vertical slice достатньо тих, які читає тест, з явною помилкою при відсутньому обов’язковому значенні.

3. API preconditions →

Python мануфактура · Сесії: 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 взаємодіє з браузером через протокол →
Запитати в чаті про «autocomplete» →