Уточнение причины смешивания Неявные и явные ожидания документа Selenium

Я читал документацию SeleniumHQ и наткнулся на следующие утверждения.

«ПРЕДУПРЕЖДЕНИЕ: не смешивайте неявные и явные ожидания. Это может привести к непредсказуемым временам ожидания. Например, установка неявного ожидания 10 секунд и явное ожидание 15 секунд может вызвать таймаут после 20 секунд».

По какой-то причине я не могу понять это. Общий тайм-аут 20-го года является главной причиной для меня. Может ли кто-нибудь объяснить, если я что-то упустил?

РЕДАКТИРОВАТЬ

Мой вопрос заключается не в реализации / последствиях смешивания этих ожиданий. Это полностью касается утверждений и расчета тайм-аута в документе.

2nd Edit

Похоже, что документ соответствует приведенным ниже результатам. Мне все еще нужно объяснение .

Просто неявное ожидание

using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); _webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { //new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( //ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } catch ( NoSuchElementException exception) //catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Время в секундах: 00: 00: 10.0167290

Просто явное ожидание

 using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); //_webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } //catch ( NoSuchElementException exception) catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Время в секундах: 00: 00: 15.2463079

Смешанные, явные и неявные

 using System; using System.Diagnostics; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace Test { [TestFixture] public class Test { private IWebDriver _webDriver; [Test] public void ExplicitVsImplicitWaitTest() { _webDriver = new ChromeDriver(); _webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10)); _webDriver.Navigate().GoToUrl("https://www.google.com/"); _webDriver.Manage().Window.Maximize(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { new WebDriverWait(_webDriver, TimeSpan.FromSeconds(15)).Until( ExpectedConditions.ElementExists(By.CssSelector("Should Fail"))); _webDriver.FindElement(By.CssSelector("Should Fail")); } //catch ( NoSuchElementException exception) catch ( OpenQA.Selenium.WebDriverTimeoutException) { stopwatch.Stop(); Console.WriteLine(stopwatch.Elapsed); } _webDriver.Quit(); } } } 

Время в секундах: 00: 00: 20.5771817

Мой вопрос не в том, чтобы реализовать эти ожидания. Это полностью касается утверждений и расчета тайм-аута в документе.

Но вы должны знать, как они реализованы, чтобы понять, что происходит. Вот что происходит с вашим сочетанием двух типов ожиданий. Я выполняю те шаги, которые не важны для обсуждения.

  1. Ваш скрипт устанавливает неявное ожидание.

  2. Ваш скрипт начинает явное ожидание проверки существования элемента. Явное ожидание работает путем опроса . Поэтому он отправляет команду браузеру для проверки существования элемента.

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

  4. Ваше явное ожидание проверяет, достиг ли он своего временного предела, равного 15 с. В настоящее время в 10 секунд (+ крошечное количество времени, затраченного на выполнение сценария, латентности сети и т. Д.) В ожидании, которое составляет менее 15 секунд. Таким образом, это не сделано для ожидания и переиздает ту же команду, что и на шаге 2 выше.

  5. Из-за неявного ожидания команда, отправленная в браузер, занимает 10 секунд, чтобы вернуть сбой.

  6. Когда явное ожидание снова проверяется на свой собственный тайм-аут, прошло более 15 секунд, поэтому время истекает.

Таким образом, явное ожидание проверяет дважды, и каждый раз занимает 10 секунд, что означает 20 секунд (плюс крошечное количество времени для учета бухгалтерского учета).

Явное ожидание ничего не делает для обнаружения и компенсации неявного ожидания, которое было установлено. И он не продолжает работать параллельно с командами, которые он отправляет в браузер. В то время как выполняется команда браузера, явное ожидание не делает никакой бухгалтерской отчетности или не может тайм-аут. Он должен дождаться завершения команды браузера, прежде чем проверять, должен ли он тайм-аут.

  • Webdriver: загрузка файла
  • При запуске WebDriver с браузером Chrome, получая сообщение, разрешены только локальные подключения, даже если браузер запускается правильно
  • Какова связь между Selenium RC и WebDriver?
  • Условные имена classов не поддерживают ошибку в WebDriver
  • Как я могу попросить Selenium-WebDriver ждать несколько секунд в Java?
  • Как выбрать элемент из выпадающего списка с помощью Selenium WebDriver с java?
  • Какой лучший и быстрый способ найти элемент с помощью webdriver? By.XPath или By.ID или что-нибудь еще? И почему?
  • Как выбрать параметр из раскрывающегося списка с помощью Selenium WebDriver C #?
  • Разница между webdriver.get () и webdriver.navigate ()
  • Есть ли проверенное решение mouseOver для FirefoxDriver в Selenium2?
  • Эквивалент waitForVisible / waitForElementPresent в тестах Selenium WebDriver с использованием Java?
  • Interesting Posts

    Отображение столбца PostgreSQL JSON для типа значения Hibernate

    Гик-помощь вводится глубже по иерархии зависимостей

    Как я могу использовать скриншоты браузера с более высоким разрешением, чем поддерживает мой браузер?

    Проверьте соответствие строки регулярному выражению в JS

    Использование порта Кассандры – как используются порты?

    Сопоставьте все селекторы classов, которые начинаются с?

    Как я могу обернуть метод, чтобы я мог убить его выполнение, если он превышает указанный тайм-аут?

    Равномерность набора тестов chai не работает должным образом

    Существуют ли жизнеспособные альтернативы шаблону Singleton в GOF?

    Правильный способ привязки ракеты-носителя mvc3 к модели

    WCF ChannelFactory против генератора прокси

    C ++ Заголовок заголовка

    Создание папки с именем «CON» в Windows

    Водяной знак FFmpeg

    Как выполнить функцию, когда страница полностью загружена?

    Давайте будем гением компьютера.