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

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

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

Зібрати Page Object без довгоживучих WebElement

Створіть BasePage з wait-aware click() і type_text().
Збережіть локатори login page як tuple (By.CSS_SELECTOR, value).
Створіть предметний login() і перевірку success state.
Перерендерте один компонент у test page та переконайтеся, що дія повторно знаходить елемент за locator.
Тест читається через предметні Page Object methods і не використовує implicit wait або довгоживучі WebElement fields.

2. Selenium організація PageObject's та Очікувань →

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

Мінімальний wait-aware BasePage

Page Objects передають locator tuple у BasePage, а кожна дія очікує власну перевірювану передумову.

click() працює лише з видимим і enabled елементом; type_text() — з видимим елементом.

2. Selenium організація PageObject's та Очікувань →

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

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

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

1 типи даних →

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

Locator замість завчасно знайденого `WebElement`

`find_element()` є eager operation: команда одразу йде до WebDriver. Тому конструкція на кшталт `EC.visibility_of(driver.find_element(...))` не захищає від раннього `NoSuchElementException` — елемент уже намагалися знайти. Для елемента, який ще має з’явитися, використовується `EC.visibility_of_element_located((By.CSS_SELECTOR, selector))`. Condition отримує locator tuple і сам повторює пошук до успіху або timeout. Збереження `By.CSS_SELECTOR` у tuple також зменшує ризик переплутати тип локатора зі звичайним рядком. Різниця принципова: `is_displayed()` робить одне звернення до стану вже знайденого element ID, тоді як explicit wait повторює перевірку. Саме тому очікування треба прив’язувати до спостережуваного стану, а не просто додавати після будь-якого пошуку.

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

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

Від сирого сценарію до Page Object

Стартовий тест напряму викликає `driver.find_element()`, `WebDriverWait(...).until(...)` і браузерні дії. Він придатний для перевірки ідеї, але змішує бізнес-сценарій із технікою Selenium, тому наступний крок — дати діям читабельні назви й рознести їх по Page Objects. Замість Playwright `Page` у конструктор Page Object передається Selenium WebDriver. Спільний `BasePage` зберігає driver і один раз ініціалізує стандартне очікування, щоб кожен клас сторінки не дублював timeout та polling configuration. Найпрактичніше представлення локатора — tuple на кшталт `(By.CSS_SELECTOR, "...")`. Воно зберігає і стратегію, і значення пошуку та напряму сумісне з locator-based expected conditions.

2. Selenium організація PageObject's та Очікувань →

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

`*args` і `**kwargs`

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

6 функції →

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

Locator, `WebElement` або рядок

На Python-проєктах можна зустріти три підходи: зберігати locator tuple, лише CSS/XPath-рядок або вже знайдений `WebElement`. Рядок коротший, але не містить тип пошуку; `WebElement` зручний лише поки DOM-вузол не перерендерився; locator дає змогу безпечно виконувати повторний пошук. Якщо helper має приймати і locator, і `WebElement`, це можна відобразити union type та всередині визначити потрібну expected condition. Така гнучкість виправдана лише коли обидва представлення реально використовуються; для нового коду один locator-based контракт простіший. Wait helper отримує default timeout, але дозволяє локально передати довший для справді повільної операції. Page Object може застосовувати Loadable Component approach: сторінка вважається готовою лише після появи її ключових елементів, наприклад email і password inputs.

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