Неявное ожидание(Implicit waits)



Selenium имеет встроенный способ автоматического ожидания элементов, называемый неявным ожиданием(Implicit waits). Это глобальная настройка, которая применяется ко всем вызовам поиска элементов на протяжении всей сессии. По умолчанию значение равно 0, что означает, что если элемент не найден, он немедленно вернет ошибку. Если установлено неявное ожидание, драйвер будет ждать указанное время перед возвратом ошибки.

driver.implicitly_wait(2)
driver.get('https://www.selenium.dev/selenium/web/dynamic.html')
driver.find_element(By.ID, "adder").click()
added = driver.find_element(By.ID, "box0")

Implicit Wait — это время, которое Selenium будет ждать по умолчанию перед тем как выбросить исключение, если он не может найти элемент. Это как бы глобальный таймер, который применяется ко всем операциям поиска элементов.

Аналогия из реальной жизни

Представьте, что вы идете в кафе и заказываете кофе. Бариста говорит, что приготовление займет около 5 минут. Вы решаете подождать. Эти 5 минут — это ваше «ожидание»(Implicit Wait). Если через 5 минут или раньше кофе готов, вы его забираете и всё у вас хорошо. Если нет, вы начинаете задаваться вопросом, что происходит, возможно даже начинаете нервничать. В контексте Selenium, если элемент не появляется в течение заданного времени ожидания, возникает исключение.

Почему необходимо использовать Implicit Wait?

Простота: Это простой способ убедиться, что ваш код будет ждать достаточное количество времени перед тем как продолжить выполнение.

Глобальность: Один раз установив, он применяется ко всем последующим операциям поиска.

Важные замечания

Не рекомендуется смешивать Implicit Waits и Explicit Waits в одном тесте, так как это может привести к непредсказуемым результатам.

Implicit Wait не всегда является лучшим решением, особенно если на веб-странице много динамически загружаемого контента. В таких случаях лучше использовать Explicit Waits.

Как это работает?

Задание времени ожидания. Когда вы устанавливаете Implicit Wait, вы фактически говорите Selenium: «Если я попытаюсь найти элемент и не найду его сразу, не выбрасывай ошибку. Вместо этого жди заданное мной время, пытаясь найти этот элемент».

Поиск элемента. Когда вы пытаетесь найти элемент на странице (например, используя find_element_by_id), Selenium сначала проверяет, виден ли этот элемент сразу.

Ожидание. Если элемент не найден сразу:

Selenium будет периодически (каждые 0.2 сек, по умолчанию) проверять наличие элемента на странице.

Это повторяется до тех пор, пока элемент не будет найден или пока не истечет установленное время Implicit Wait.

Результат. Если элемент появляется на странице в течение заданного времени ожидания, код продолжает выполнение.

Если время истекло, и элемент так и не был найден, Selenium выбросит исключение NoSuchElementException.



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: