Урок 07. Расширенные практики Selenium

📁 Блок: Selenium ⏱️ Время изучения: ~60 мин 🎯 Сложность: Средняя
#explicit-wait #WebDriverWait #expected-conditions #AJAX #send-keys #pytest

⚡ Кратко: ожидания и EC в Selenium 4

Три вида ожидания: implicitly_wait — глобальное, для всех find_element; WebDriverWait + EC — явное, ждёт конкретного условия; time.sleep — жёсткое, антипаттерн.

  • Лучший выбор: явное ожидание — WebDriverWait(driver, 10).until(EC.element_to_be_clickable(...))
  • Ключевые EC: presence_of_element_located, visibility_of_element_located, element_to_be_clickable, text_to_be_present_in_element, url_contains
  • AJAX: страницы обновляются без перезагрузки → нужно явное ожидание конкретного состояния элемента
  • send_keys() — ввод текста; clear() — очистка поля; click() — клик
  • staleness_of — ждёт исчезновения элемента из DOM
  • element_located_to_be_selected — ждёт выбора чекбокса / radio-button

Топ-3 ошибки: 1) Смешивать implicitly_wait и WebDriverWait в одном тесте — непредсказуемые задержки. 2) Использовать time.sleep вместо EC — тест медленный и ненадёжный. 3) Путать presence (в DOM) и visibility (виден пользователю).

📖 О чём этот урок

При автоматизации тестирования с Selenium критически важно уметь корректно обрабатывать ожидания загрузки элементов. Если этого не делать, тест будет нестабильным: иногда проходить, иногда падать из-за того, что элемент ещё не загрузился.

В этом уроке мы разберём три подхода к ожиданиям, изучим все основные Expected Conditions, научимся писать надёжные тесты для AJAX-страниц и освоим базовые взаимодействия с элементами.

Что изучим

  • Три вида ожидания: неявные, явные, жёсткие — сравнение, плюсы и минусы
  • WebDriverWait + expected_conditions — все ключевые условия
  • Что такое AJAX и почему нужны явные ожидания
  • Написание pytest-тестов с явным ожиданием для AJAX-страниц
  • Взаимодействие с элементами: send_keys(), clear(), click()
  • Практические задания из лекции: slow calculator, OrangeHRM, form validation

📚 Что повторить перед изучением

🎯 Что изучать дальше