Что такое Selenium Waits? Какие есть и чем отличаются?


🔹 Что такое Waits?

Это механизмы ожидания, которые Selenium использует, чтобы дождаться доступности элемента или события перед выполнением следующего шага. Без них тест может упасть с ошибкой NoSuchElementException или ElementNotInteractableException.


🔹 Виды ожиданий в Selenium (Python)

1. Implicit Wait (Неявное ожидание)

  • Устанавливается один раз для всего драйвера.

  • Selenium при поиске элемента будет пытаться его найти в течение заданного времени, проверяя каждые несколько миллисекунд.

  • Если элемент найден раньше — идём дальше.

  • Работает для всех элементов.

📌 Пример:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # ждать до 10 секунд

driver.get("https://example.com")
element = driver.find_element("id", "username")  # будет ждать появления до 10 сек.

✅ Плюсы: просто, минимум кода. ❌ Минусы: применяется ко всем элементам, не всегда гибко.


2. Explicit Wait (Явное ожидание)

  • Более гибкий подход.

  • Ждём конкретное условие для конкретного элемента.

  • Используем WebDriverWait + expected_conditions.

📌 Пример:

✅ Плюсы: гибкость, можно ждать конкретные состояния (видимость, кликабельность, исчезновение). ❌ Минусы: больше кода, чем implicit wait.


3. Fluent Wait (Расширенное явное ожидание)

  • Это разновидность Explicit Wait.

  • Позволяет задать:

    • максимальное время ожидания,

    • частоту опроса (polling),

    • список игнорируемых исключений.

📌 Пример:

✅ Плюсы: настраиваемый, можно игнорировать ошибки. ❌ Минусы: сложнее в использовании.


🔹 Разница между ними

Вид ожидания
Применение
Время ожидания
Где задаётся

Implicit

Для всех элементов

Один раз на драйвер

driver.implicitly_wait()

Explicit

Для конкретного элемента

При вызове

WebDriverWait + until()

Fluent

То же, что explicit, но с гибкой настройкой (polling, исключения)

При вызове

WebDriverWait(..., poll_frequency, ignored_exceptions)


👉 Обычно в проектах не смешивают implicit и explicit waits (это может вызывать непредсказуемые задержки). На практике:

  • Explicit и Fluent → для динамических элементов.

  • Implicit → если проект простой и динамики мало.

Last updated

Was this helpful?