Python & Selenium: разница между driver.implicitly_wait() и time.sleep()

Да, я знаю, что оба привыкли ждать определенное время.

Селен:

driver.implicitly_wait(10)

Python:

import time
time.sleep(10)

Есть ли разница между этими двумя?

3 ответа

time.sleep(сек)

time.sleep(secs) приостанавливает выполнение текущего потока на указанное количество секунд. Аргумент может быть числом с плавающей запятой, чтобы указать более точное время сна. Фактическое время приостановки может быть меньше запрошенного, потому что любой перехваченный сигнал прервет режим сна () после выполнения процедуры перехвата этого сигнала. Кроме того, время приостановки может быть дольше, чем запрошено на произвольную величину из-за планирования других действий в системе.

Вы можете найти подробное обсуждение в разделе Как перевести webdriver в Python на миллисекунды.


implicitly_wait (TIME_TO_WAIT)

implicitly_wait (time_to_wait) - указать количество времени, в течение которого экземпляр WebDriver, т. е. драйвер должен ждать при поиске элемента, если он не присутствует непосредственно в HTML DOM в терминах SECONDS при попытке найти элемент или элементы, если они не доступны сразу. Значение по умолчанию 0, что означает driver Когда находит инструкцию, чтобы найти элемент или элементы, поиск начинается, и результаты доступны на немедленной основе.

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

  • NoSuchElementException
  • TimeoutException
  • ElementNotVisibleException
  • ElementNotSelectableException
  • ElementClickInterceptedException
  • ElementNotInteractableException

Поэтому мы вводим ImplicitWait. Вводя ImplicitWait, драйвер будет опрашивать дерево DOM, пока элемент не будет найден в течение настроенного периода времени, ища элемент или элементы, прежде чем выдать NoSuchElementException, К тому времени элемент или элементы, которые вы искали, могут быть доступны в HTML DOM. Так как в вашем коде вы уже установили значение ImplicitWait в 10 секунд, драйвер будет опрашивать HTML DOM в течение 10 секунд.

Вы можете найти подробное обсуждение в разделе Использование неявного ожидания в селене.

  • time.sleep(10) приостанавливает выполнение кода ровно на 10 секунд.
  • driver.implicitly_wait (10) ожидает максимум 10 секунд присутствия элемента. Если он найден через 2 секунды, то выполнение кода будет продолжено без ожидания более 8 секунд.

Когда мы используем неявное ожидание в тестовом скрипте, оно объявляется глобально и автоматически применяется ко всем элементам этого скрипта и, например, в Java, если вы используете неявное ожидание. -> водитель. управления (). таймауты ().implictwait(10,timeunit.seconds);. этот код будет ожидать появления элемента в DOM, а затем будет ждать, когда элемент станет видимым, выполнение продолжится. во время удержания выполнение скрипта останавливается.

В thread.sleep(1000) в этом случае скрипт будет удерживаться в течение 1000 мс, независимо от того, будет ли элемент видим на dom при 500 мс, он будет оставаться в этой точке до 1000 мс.

Thread.sleep () - это статическое ожидание, которое содержит длительность сценария в течение фиксированного количества времени. Где в качестве неявного ожидания будет выполнено выполнение скрипта, пока элемент не станет видимым в DOM.

Надеюсь это поможет!

Другие вопросы по тегам