Явное и неявное ожидание в Selenium

Явное и неявное ожидание в библиотеке Selenium

Одним из ключевых аспектов автоматизации веб-тестирования является ожидание: ждем, пока элементы будут загружены или станут доступными для взаимодействия. В Selenium WebDriver существуют два основных типа ожиданий: явные и неявные.

Явное ожидание

Явное ожидание — это конфигурируемый тип ожидания для определенного условия. Это означает, что WebDriver будет ждать определенное количество времени до тех пор, пока определенное условие не выполнится.

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

driver.get("https://example.com")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "my_element"))
    )
finally:
    driver.quit()

Здесь мы ждем до 10 секунд, пока элемент с ID my_element не станет доступным.

Неявное ожидание

Неявное ожидание, в отличие от явного, применяется ко всем элементам на веб-странице. WebDriver будет периодически опрашивать DOM в течение заданного времени, пока элемент не станет доступным.

driver.implicitly_wait(10) # ждет до 10 секунд
driver.get("https://example.com")
element = driver.find_element(By.ID, "my_element")

Когда и что использовать?

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

WebDriverWait() и expected_conditions() в Selenium

В Selenium WebDriver для Python предоставлены две весьма полезные функции для работы с явными ожиданиями: WebDriverWait() и expected_conditions(). Давайте ближе рассмотрим, как их использовать.

WebDriverWait()

WebDriverWait() используется для указания максимального времени ожидания, в течение которого WebDriver будет пытаться выполнить определенное условие.

Пример:

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

driver.get('https://example.com')
wait = WebDriverWait(driver, 10)

element = wait.until(EC.presence_of_element_located((By.ID, 'my_element')))

В данном примере WebDriver будет ждать до 10 секунд пока не найдет элемент с ID my_element. Если элемент не появится в течение этого времени, будет выброшено исключение TimeoutException.

expected_conditions()

expected_conditions() — это набор предустановленных условий, которые можно использовать с WebDriverWait.

Вот несколько наиболее часто используемых условий:

  • presence_of_element_located: проверяет, присутствует ли элемент на странице.
  • visibility_of_element_located: проверяет, видим ли элемент пользователю.
  • element_to_be_clickable: проверяет, можно ли кликнуть по элементу.
  • title_is: проверяет, совпадает ли текущий заголовок страницы с ожидаемым.

Пример:

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'my_button'))
)

В этом примере WebDriver будет ждать до 10 секунд, пока кнопка с ID my_button не станет кликабельной.

WebDriverWait() и expected_conditions() предоставляют мощные инструменты для работы с явными ожиданиями в Selenium. Они позволяют создавать более надежные, читаемые и поддерживаемые автоматизированные тесты. Эти функции стоит использовать в случаях, когда неявные ожидания не предоставляют достаточного уровня контроля.

Заключение

Ожидание элементов — критически важный аспект в автоматизации тестирования веб-приложений. Умелое использование явных и неявных ожиданий позволяет создавать надежные и эффективные автоматизированные тесты. Совмещение этих двух подходов дает вам максимальный контроль и гибкость в автоматизации тестов.

Содержание: