ImplicitWait
ImplicitWait служит для указания количества времени, в течение которого экземпляр WebDriver , то есть драйвер , должен ожидать при поиске элемента, еслион не присутствует сразу в HTML DOM в терминах NANOSECONDS
, MICROSECONDS
, MILLISECONDS
, SECONDS
, MINUTES
, HOURS
или DAYS
при попытке найти элемент или элементы, если они не доступны сразу.По умолчанию установлено значение 0 , что означает driver
, когда находит инструкцию для поиска элемента или элементов, поиск начинается, и результаты становятся доступными немедленно.
В этом случае послепри новой загрузке веб-страницы элемент или элементы могут быть / не найдены при немедленном поиске.Таким образом, ваш Automation Script
может столкнуться с любым из следующих исключений:
Поэтому мы вводим ImplicitWait .Путем введения ImplicitWait драйвер будет опрашивать дерево DOM , пока не будет найден элемент в течение заданного промежутка времени, ищаэлемент или элементы перед выбрасыванием NoSuchElementException .К тому времени элемент или элементы, которые вы искали, могут быть доступны в HTML DOM .Как и в вашем коде, вы уже установили ImplicitWait в значение 10 секунд, драйвер будет опрашивать HTML DOM для 10 секунд.
Наконец, после установки ImplicitWait
, экземпляр WebDriver
, т. Е. driver
способен переносить эту конфигурацию до ее срока службы.Но если вам нужно изменить грубое время для экземпляра WebDriver
, то есть driver
на wait
, вы можете перенастроить его следующим образом:
Если в любой момент времени вы хотите обнулить ImplicitWait
вы можете перенастроить его следующим образом:
Вы можетеподробное обсуждение см. в Использование неявного ожидания в селене
ExplicitWait
ExplicitWait - блок кода, который вы определяете, настраиваете и реализуете дляэкземпляр WebDriver для ожидания выполнения определенного условия, прежде чем переходить к следующей строке кода.Есть несколько методов, которые помогают нам реализовать ExplicitWait , которые будут ждать только столько времени, сколько потребуется. WebDriverWait в сочетании с ExpectedCondition может быть одним из способов Явное ожидание может быть достигнуто.
Пример:
Объяснение:
Эта реализация ExplicitWait ожидает до 10 секундперед броском TimeoutException
или, если он найдет элемент, он вернется в течение от 0 до 10 секунд. WebDriverWait по умолчанию вызывает ExpectedCondition
каждые 500 миллисекунд, пока не завершится успешно.Успешное возвращаемое значение для типа функции ExpectedCondition
представляет собой Boolean
значение true или ненулевой объект.
Ожидаемые условия:
Существуют некоторые часто встречающиеся условия при автоматизации WebБраузеры для Testing Web/Mobile Applications
.Привязки Java, C # и Python включают эти удобные методы, поэтому нам не нужно самим писать класс ExpectedCondition
или создавать собственный пакет утилит для них.Вот некоторые из Expected Conditions
:
alertIsPresent()
elementToBeClickable(locator)
elementToBeSelected(WebElement)
frameToBeAvailableAndSwitchToIt(locator)
invisibilityOf(element)
Здесь вы можете найти информацию обо всех методах, поддерживаемых Ожидаемые условия .
Подробное обсуждение можно найти в Заменить неявное ожидание явным ожиданием (selenium webdriver & java) .
Note
: Не смешивать implicit and explicit waits
.Это может привести к unpredictable wait times
.Например, установка неявного ожидания 10 секунд и явного ожидания 15 секунд может привести к возникновению тайм-аута через 20 секунд.