Неявное vs явное vs плавное ожидание

В чем разница между неявным, явным и плавным ожиданием?

Если мы установим 10 секунд в неявном ожидании и раньше 10 секунд, в течение 3 секунд будет обнаружен только элемент.

Что тогда будет? Он подождет 10 секунд или продолжит работу.


person user3430181    schedule 08.01.2018    source источник
comment
Тот же вопрос для явного ожидания, если я полностью выполнил ожидаемое условие раньше времени. В то время это будет продолжаться или Ждать упоминания времени?   -  person user3430181    schedule 08.01.2018
comment
Пожалуйста, погуглите ответ, прежде чем размещать здесь вопрос. Если у вас есть особые сомнения, обновите вопрос.   -  person Gaurang Shah    schedule 08.01.2018


Ответы (3)


ImplicitWait

ImplicitWait - это реализация для настройки экземпляр WebDriver, т.е. драйвер для опроса HTML DOM в течение определенного периода времени (между NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS или DAYS) при попытке найти элемент или элементы, если они не доступны сразу. По умолчанию установлено значение 0, что означает, что драйвер находит инструкцию по поиску элемента или элементов, поиск запускается и результаты становятся доступными немедленно.

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

  • NoSuchElementException
  • TimeoutException
  • ElementNotVisibleException
  • ElementNotSelectableException

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

  • Python:

    driver.implicitly_wait(10)
    
  • Ява:

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

Наконец, как только вы установите ImplicitWait, экземпляр WebDriver, то есть драйвер, сможет сохранять эту конфигурацию до своего времени жизни. Но если вам нужно изменить грубость времени для экземпляра WebDriver, то есть для драйвера, на wait, вы можете изменить его конфигурацию следующим образом:

  • Python:

    driver.implicitly_wait(5)
    
  • Ява:

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    

Если в какой-то момент вы захотите обнулить ImplicitWait, вы можете изменить его конфигурацию следующим образом:

  • Python:

    driver.implicitly_wait(0)
    
  • Ява:

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    

Свободное ожидание

Беглое ожидание является реализацией Wait интерфейс, с помощью которого мы можем настроить тайм-аут и интервал опроса на лету. Экземпляр FluentWait может быть определен для настройки максимального времени ожидания условия, а также частоты, с которой условие должно проверяться. Пользователь также может настроить ожидание, чтобы игнорировать определенные типы исключений при ожидании элемента, такого как NoSuchElementException на странице.

  • Использование:

       // Waiting 30 seconds for an element to be present on the page, checking
       // for its presence once every 5 seconds.
       Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
           .withTimeout(30, SECONDS)
           .pollingEvery(5, SECONDS)
           .ignoring(NoSuchElementException.class);
    
       WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
         public WebElement apply(WebDriver driver) {
           return driver.findElement(By.id("foo"));
         }
       });
    

ExplicitWait

ExplicitWait, широко известный как WebDriverWait - это специализированная реализация FluentWait, с помощью которого пользователь может определить, настроить и реализовать экземпляр WebDriver для ожидания выполнения определенного условия перед переходом к следующей строке кода. Есть несколько методов, которые помогают нам реализовать ExplicitWait который будет ждать столько, сколько потребуется. WebDriverWait в сочетании с ExpectedConditions является одним из способов ExplicitWait может быть достигнут.

Пример:

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));
element.click();

Объяснение:

Эта реализация ExplicitWait ожидает до 10 секунд, прежде чем бросить TimeoutException, или, если она найдет элемент, то вернется в течение 0-10 секунд. WebDriverWait по умолчанию вызывает ExpectedCondition каждые 500 миллисекунд, пока оно не вернется успешно. Успешным возвращаемым значением для типа функции ExpectedCondition является Boolean значение true или ненулевой объект.


Ожидаемые условия:

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

  • alertIsPresent()
  • elementToBeClickable(locator)
  • elementToBeSelected(WebElement)
  • frameToBeAvailableAndSwitchToIt(locator)
  • invisibilityOf(element)

Вы можете узнать обо всех методах, поддерживаемых Ожидаемые условия здесь.


Этот конкретный запрос:

  • При поиске одного элемента драйвер будет опрашивать OM до тех пор, пока элемент не будет найден или пока не истечет настроенный тайм-аут, прежде чем выбросить NoSuchElementException.
  • При поиске нескольких элементов драйвер будет опрашивать DOM до тех пор, пока не будет найден хотя бы один элемент или пока не истечет настроенный тайм-аут.

Таким образом, в первом случае водитель будет ждать всего 3 секунды.

person DebanjanB    schedule 09.01.2018

Если мы установим 10 секунд в неявном ожидании и раньше 10 секунд, в течение 3 секунд будет обнаружен только элемент.

На этот раз он будет идти дальше, а не ждать установленного времени ..

person user3430181    schedule 27.01.2020

Неявное ожидание сообщает веб-драйверу, что нужно выждать определенное время, прежде чем он выдаст исключение «NoSuchElementException». Значение по умолчанию - 0. После того, как мы установим время, веб-драйвер будет ждать в течение этого времени, прежде чем генерировать исключение. Если вы указали 10 секунд как время ожидания, но элемент идентифицируется как 3 секунды, то он перейдет к следующему шагу через 3 секунды.

Явное ожидание - это код, который вы определяете для ожидания наступления определенного условия, прежде чем продолжить выполнение кода. Явное ожидание сообщит веб-драйверу, что нужно дождаться определенных условий, таких как visibilityOfElementLocated и максимальное количество времени, прежде чем генерировать исключение NoSuchElementException. Вы можете сослаться на это - https://configureselenium.blogspot.com/2019/07/implicit-explicit-fluent-wait-in.html.

person Vibha Singh    schedule 07.02.2020