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

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

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

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

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

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

3. API preconditions →

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

Обрати API для autocomplete

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

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

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

Провести Git safety audit

В окремому навчальному repository додайте правила для .venv/, .env і test results.
Перевірте кожен path через git check-ignore -v.
Задайте local user.name і user.email, потім перевірте їх через git config --list --show-origin.
Команди перевірки та staged diff, у якому немає .env і generated artifacts.

Гітігнор та як працювати з гітом та не помилитись →

Практика · 4:12

Сформулювати readiness contract

Для сторінки зі skeleton, product list і payment iframe вибери мінімальні сигнали, після яких користувач може виконати наступну бізнес-дію.
Кожен signal пов’язаний із реальною наступною дією.
Немає sleeps або перевірки кожного DOM element.
iframe control шукається через frame-aware locator.

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

Термін · 16:00

In-place list operation

Methods mutable collections, які лише змінюють object, повертають None; тому list.insert() і list.sort() не треба присвоювати назад змінній.

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

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

Фільтрація failed status codes

Вираз `[code for code in status_codes if code >= 400]` проходить по input list і залишає лише значення, що відповідають умові. Результат — новий list; вихідна колекція не змінюється. Межу `>= 400` треба читати точно, бо `> 400` випадково відкине code `400`.

5 comprehensions →

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

`for` для list і set

`for item in collection` по черзі підставляє кожен елемент у змінну циклу. Це типовий спосіб обійти Playwright locators, Selenium elements, test cases або users. List зберігає порядок і дублікати; set прибирає дублікати, але його порядок не слід використовувати як частину очікуваної поведінки тесту.

4 цикли →

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

`split()` і змінюваний `list`

`.split(separator)` перетворює один рядок на `list[str]`, наприклад список email або частини тексту. Після цього до елементів можна звертатися за індексом, видаляти, вставляти або сортувати їх. Під час експерименту видно важливу особливість: методи на кшталт `list.insert()` змінюють список на місці й повертають `None`. Тому результат не треба присвоювати назад у список; спочатку викликається `emails.insert(...)`, потім читається `emails`.

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

Python мануфактура · Програма курсу · 4:32–5:30

Списки та membership

`list` зберігає порядок, допускає дублікати й доступ за індексом. Оператор `in` перевіряє наявність елемента. Порівняння рядків чутливе до регістру та пробілів: `Firefox`, `firefox` і `"firefox "` — різні значення, тому зовнішні дані часто треба нормалізувати.

1 типи даних →

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

Списки цін, `max()` і читабельна перевірка

Кілька цін збираються в типізований список, наприклад `list[float]`. `max(prices)` знаходить найбільше значення, а перший елемент можна порівняти з ним, щоб перевірити сортування «від більшої ціни». Навіть коротку, але предметно важливу логіку пропонується оформити функцією на кшталт `is_first_price_highest(prices)`. Назва пояснює вимогу краще, ніж вкладене порівняння всередині великого тесту.

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

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

Transform і вибір потрібного поля

Comprehension може не лише фільтрувати, а й перетворювати кожен element: наприклад, витягнути emails або IDs із list of dictionaries. Вираз ліворуч описує значення результату, `for` — джерело, а optional `if` — фільтр.

5 comprehensions →

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

Lookup dictionary за ID

`{user["id"]: user for user in users}` будує index, де ID стає key, а весь user — value. Після цього конкретний об’єкт читається напряму, без повторного проходу по list. Якщо IDs дублюються, пізніше значення перезапише попереднє — це слід перевіряти, якщо унікальність не гарантована контрактом.

5 comprehensions →

Python мануфактура · Програма курсу · 3:30–5:02

`*args` і `**kwargs`

`*locators` збирає довільну кількість positional arguments у tuple, який можна перетворити на list. `**headers` збирає named arguments у dictionary. Ці форми корисні, коли кількість однотипних inputs справді змінна; для стабільного контракту явні parameters читабельніші.

6 функції →

Python мануфактура · Програма курсу · 4:00–5:08

Нормалізація та set comprehension

`{email.lower() for email in emails}` одночасно переводить email у lower case й прибирає дублікати. Це корисно для даних із CSV або UI, де регістр може відрізнятися. Якщо важливий порядок або треба зберегти дублікати, слід обрати list comprehension замість set.

5 comprehensions →

Python мануфактура · Сесії: AMA та PMP · 5:30–8:00

Від простого UI-тесту до Page Objects, API та CI

[Дивитися з 05:30](https://www.youtube.com/watch?v=viR9Rnmxse4&t=330s). Suite ускладнюється вертикально: спочатку прямий UI-flow, потім reusable helpers, Page Objects, розширення object model, API preconditions і повторне використання authenticated state. Складніший сценарій може створити другу людину, зареєструвати її на event і перевірити participant list від імені admin. Пізніше ті самі tests мають запускатися в CI, де з’являться окремі environment-specific failures.

Практика курсу на YOY, домашні завдання та формат ПМП →
Запитати в чаті про «list» →