Что такое явное ожидание (explicit wait) в автоматизированном тестировании и приведи пример на Python с Selenium?

«Что такое явное ожидание (explicit wait) в автоматизированном тестировании и приведи пример на Python с Selenium?» — вопрос из категории Управление тестированием, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Явное ожидание (Explicit Wait) — это механизм в автоматизированном тестировании, который приостанавливает выполнение скрипта до выполнения определенного условия (например, появления элемента на странице) в течение заданного таймаута. Оно предпочтительнее неявных ожиданий и жестких пауз (time.sleep), так как делает тесты более надежными и быстрыми.

Пример на Python с Selenium WebDriver:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Создаем объект ожидания с таймаутом 10 секунд
wait = WebDriverWait(driver, 10)

# Ожидаем появления элемента с ID "dynamic-element" и получаем его
# Если элемент не появится за 10 секунд, будет выброшено исключение TimeoutException
element = wait.until(
    EC.presence_of_element_located((By.ID, "dynamic-element"))
)
# Теперь можно взаимодействовать с элементом
element.click()

Ключевые моменты:

  • Условие: Используются готовые методы из expected_conditions (EC), такие как presence_of_element_located, element_to_be_clickable, visibility_of_element_located.
  • Таймаут: Максимальное время ожидания условия.
  • Возврат: Метод until возвращает результат условия (например, найденный веб-элемент).
  • Исключение: При неудаче выбрасывается TimeoutException.

Альтернативы (менее надежные):

  • Неявные ожидания (Implicit Waits): Глобальная настройка для всех поисков элементов (driver.implicitly_wait(10)).
  • Жесткие паузы (time.sleep): Блокируют выполнение на фиксированное время независимо от состояния приложения.