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

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

Практика · 21:24

Створити file template для Page Object

Створіть custom file template з імпортом Page, класом, __init__, self.page і return self.
Використайте ${NAME} для назви створюваного класу або файла.
Створіть пробний Page Object і виправте всі syntax та inspection errors у самому шаблоні.
Новий Page Object створюється одним пунктом меню та не містить syntax або unresolved reference errors.

Майструємо IDE під себе →

Приклад коду · 3:00

Instance state через self та __init__

page є instance attribute: кожен PageObject отримує власний стан через __init__, а method читає його через self.

Команда друкує Page: checkout і assertion проходить.

__init__, self, page та принципи ООП →

Приклад коду · 0:00

Відтворюваний typed test object

Stdlib-приклад показує typed object, valid range і fixed seed без додаткової dependency.

Друкується відтворюваний UserData, а assertion підтверджує базові constraints.

Тестові дані для автотестів →

Приклад коду · 17:25

Мінімальна typed projection API-відповіді

Проєктує лише потрібне поле id замість поширення raw dictionary у UI-тест.

Assertion завершується без помилки й повертає Project(id='p-1').

3. API preconditions →

Python мануфактура · Програма курсу · 0:00–1:30

Оголошення, parameters, type hints і `return`

Функція оголошується через `def`, приймає named parameters і може повертати значення. Type hints на кшталт `email: str` та `-> dict[str, str]` покращують navigation і IDE checks, але самі по собі не валідовують input at runtime.

6 функції →

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

Оголошення і виклик функції

Саме оголошення `def print_hello():` нічого не виконує. Функцію треба окремо викликати. Це розділяє опис поведінки та момент її запуску. Далі функція параметризується ім’ям. Замість фіксованого `Hello World` вона приймає `name` і формує `f"Hello {name}"`, тому один алгоритм працює з різними вхідними даними.

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

Python мануфактура · Програма курсу · 7:31–8:33

Tuple і розпакування

`tuple` підходить для фіксованої групи пов’язаних значень, наприклад `(201, "Created")`. Значення можна розпакувати за позицією у дві змінні. Кількість змінних має відповідати кількості елементів, інакше Python повідомить про помилку розпакування.

1 типи даних →

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 мануфактура · Програма курсу · 21:24–27:20

File template для Page Object

Page Object і Page Component мають повторювану основу: імпорти Playwright, клас, `__init__`, збереження `page`, базову перевірку завантаження та часто `return self`. Замість копіювання цієї «шапки» створено власний шаблон у `Settings → Editor → File and Code Templates`. У file template змінна `${NAME}` підставляє назву, яку вводять під час створення файлу. Після збереження в меню `New` з’являється окремий тип `Page Object`; вибір цього пункту створює клас з підготовленими імпортами й методами. Під час live coding шаблон кілька разів виправляється: додаються пропущені `self`, закривається дужка, коригуються відступи. Це нормальний цикл налаштування: створити пробний файл, дочекатися синтаксичних та інспекційних підказок IDE, виправити шаблон і повторити генерацію. Перевіряти потрібно саме згенерований файл, а не лише текст у вікні налаштувань. Оскільки поточні Page Object і Page Component мають однакову основу, одного file template достатньо. Окремі шаблони варто додавати лише тоді, коли їхня структура реально розійдеться.

Майструємо IDE під себе →

Python мануфактура · Програма курсу · 37:00–40:18

Виклик методів і підсумок області видимості

Один метод класу може викликати інший через `self.get_name()` і використати повернене значення. Після створення екземпляра з обов’язковим аргументом викликається публічний метод, а внутрішні деталі залишаються в класі. Підсумкова модель: локальні змінні живуть у функції; атрибути екземпляра доступні методам через `self`; модульні значення доступні коду після їх оголошення. Подальша практика — брати конкретну задачу автоматизації, експериментувати з одним типом у короткому файлі, а потім переносити перевірений вираз у тест.

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

Python мануфактура · Програма курсу · 54:13–58:29

Завершення тесту й різниця між шаблонами

Після успішного запуску тест перейменовується відповідно до перевірюваної поведінки. Для ще одного повторюваного фрагмента створюється простий live template, який розгортається в `return self`. Це підтримує ланцюжкові виклики Page Object без повторного ручного набору. Плагіни не є основою цього процесу. У викладача встановлений Junie, але частіше для окремих задач використовується Claude Code. Головний приріст швидкості в уроці дають штатні засоби PyCharm: пошук у Settings, keymap, рефакторинги та шаблони. Параметри сторонніх плагінів варто змінювати лише під реальну потребу. Підсумкова модель трьох механізмів: - **postfix template** застосовується після виразу через крапку та обгортає або перетворює цей вираз; - **live template** розгортає за абревіатурою блок коду в позиції курсора; - **file template** створює новий файл із готовою структурою. На практиці postfix зручний для `locator` або `expect`, live template — для `page.pause()`, `get_by_role()` і повторюваних методів, а file template — для Page Object. Ці механізми доповнюють один одного й не потребують зовнішнього генератора.

Майструємо IDE під себе →
Запитати в чаті про «return» →