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

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

Agent review і нове cognitive load

[Дивитися з 15:00](https://www.youtube.com/watch?v=jAl2Qf8Zlyg&t=900s). Паралельні coding agents збільшують output, але потребують більше review. Engineer має одночасно думати про race conditions, ризики, completeness ticket-а, API/data contracts і місце transformation logic. Простий приклад — dates: backend може повернути timestamp, local date або значення з timezone; без єдиного контракту різні screens покажуть різні результати.

Vibe coding, склад команди та нова роль тестувальника →

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

Незалежні користувачі, cleanup і цілісність даних

Спільний тестовий користувач створює race conditions: паралельні тести змінюють один стан, заважають один одному й роблять результат нестабільним. Найкращий шов — створювати унікального користувача або іншу сутність під конкретний тест чи worker. Фізичне видалення даних може зламати foreign keys та історичні зв'язки з orders, invoices або іншими сутностями. Через це продукт часто застосовує soft delete: запис залишається, але отримує статус deleted/inactive. Для тестових середовищ потрібно знати реальну політику refresh/cleanup; не слід бездумно накопичувати персональні production-дані або копіювати їх без маскування й визначеного строку зберігання.

Юзер менеджмент та костилі з якими ви стикнетесь в житті →

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

Пошук проєкту й race condition після кліку

Сценарій розширюється: після авторизації тест знаходить поле пошуку, вводить `Manufacture Light`, відкриває проєкт і перевіряє заголовок сторінки. Локатори виносяться у змінні, щоб одне й те саме значення використовувалось для кліку та перевірки. Очікування початкового завантаження документа не гарантує готовність динамічного UI. Після кліку Selenium одразу переходить до `find_element()`, тоді як потрібний компонент ще рендериться. У результаті тест падає не через дефект продукту, а через те, що тест швидший за інтерфейс. `is_displayed()` тут не допомагає, якщо сам `find_element()` уже кинув exception. Синхронізацію треба будувати навколо повторного пошуку елемента, а не навколо одноразової перевірки рано знайденого об’єкта.

1. Selenium початок, основи, фікстури →

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

Не змішувати implicit та explicit waits

Locator-based explicit wait вирішує stale reference тим, що на кожній спробі знаходить актуальний DOM-вузол. Це ще одна причина зберігати локатор, а не довгоживучий `WebElement`. Implicit wait радять залишити нульовим і не змішувати з explicit waits: інакше внутрішнє очікування кожного `find_element()` додається до зовнішнього polling, через що реальний timeout стає непередбачуваним. Практичне завдання — зробити `BasePage`, окремий wait helper і Page Object у вибраному locator-based стилі.

2. Selenium організація PageObject's та Очікувань →
Запитати в чаті про «race-condition» →