Чем именно явное ожидание отличается от неявного, кроме (условного ожидания), поскольку оба ожидания выполняют следующий шаг до истечения заданного времени? - PullRequest
0 голосов
/ 12 декабря 2018

Насколько мне известно, явное ожидание - это условное ожидание, и оно продолжит выполнение следующего шага, если элемент будет найден до указанного времени.Как показано в коде, неявное ожидание не должно выполняться на следующем шаге, даже если элемент будет найден до 10 секунд, но оно немедленно выполняет следующий шаг, то есть в течение 2 секунд.Он не будет продолжать опрашивать DOM в течение 10 секунд.Также, пожалуйста, предложите, как решить, какое ожидание использовать согласно примерам?Я прошел через много вопросов, но все они копируются, ожидая ответов на уровне архитектуры.

WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
String appUrl = "https://www.facebook.com/";
driver.get(appUrl);
driver.manage().window().maximize();
WebElement username = driver.findElement(By.xpath("//input[@id='email']"));

1 Ответ

0 голосов
/ 14 декабря 2018

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 секунд.

  • Java :

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

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

  • Java :

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

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

  • Java :

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

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


ExplicitWait

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

Пример:

  • Java :

    driver.get("http://www.example.com/");
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
    

Объяснение:

Эта реализация 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 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...