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

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

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

Стабілізувати Selenium-сценарій

Створіть pytest fixture з webdriver.Chrome() і гарантованим quit() після тесту.
Відтворіть вхід і пошук проєкту через By.CSS_SELECTOR.
Замініть перевірки після переходів на WebDriverWait з visibility_of_element_located.
Навмисно зламайте один locator і переконайтеся, що падіння вказує на очікувану умову.
Тест проходить без sleep і падає з діагностичним TimeoutException, якщо цільовий locator неправильний.

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

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

`WebDriverWait` та `expected_conditions`

Явне очікування створюється як `WebDriverWait(driver, timeout, poll_frequency=...)`. Timeout задає верхню межу, а `poll_frequency` — інтервал повторної перевірки. Значення треба підбирати без надмірного polling: частіші запити не лікують повільний продукт і можуть додати зайве навантаження браузеру. Метод `until()` приймає конкретну умову з `selenium.webdriver.support.expected_conditions`, яку часто імпортують як `EC`. Серед типових умов: `visibility_of_element_located`, `element_to_be_clickable`, presence, invisibility і selected state. До `WebDriverWait` можна передати ignored exceptions, наприклад `NoSuchElementException` або `StaleElementReferenceException`. Проте це працює лише тоді, коли пошук виконується всередині condition; якщо `find_element()` викликати раніше під час формування аргументу, exception виникне ще до старту polling.

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

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 початок, основи, фікстури →
Запитати в чаті про «visibility_of_element_located» →