Как именно implicitWait обрабатывается динамически в селене?

У меня есть сомнения, связанные с неявным ожиданием селена? Поскольку мы знаем, что неявное ожидание - это динамическое ожидание, это означает, что если мы упоминаем, что ожидание в течение 10 секунд для загрузки любого элемента, но если элемент загружается в течение 4 секунд, драйвер выходит из ожидания.

Итак, вопрос в том, как драйвер узнал, что элемент загружается за 4 секунды и позволяет выйти из ожидания? Мы не упомянули какие-либо условия в неявном ожидании, например, ищите видимость любого элемента, а затем выходите, как именно неявное ожидание принимает вызов, чтобы выйти из ожидания?

2 ответа

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

Неявное ожидание проверяет только, существует оно или нет, поэтому вам не нужно указывать какие-либо условия, как при явном ожидании. Но я поднял заявку на включение неявного ожидания видимости также в Chrome(см. Здесь https://bugs.chromium.org/p/chromedriver/issues/detail?id=2016) и Firefox, Chrome включил это изменение. но firefox все еще нет. Я попросил их включить его, потому что драйвер Firefox Legacy ожидает существования и видимости элемента, поэтому я хочу, чтобы здесь было то же самое.

Неявное ожидание не может быть обработано динамически с помощью Selenium. В своем эпическом комментарии Джим Эванс [Maintainer - DotNet client / IEDriverServer] упомянул, что implicitlyWaits часто (не всегда может быть) реализован наremoteсторона системы WebDriver. Это означает, что ImplicitWait являются запеченными в к WebDriver вариантов т.е. GeckoDriver, IEDriverServer, ChromeDriver, то расширение WebDriver Firefox, которые устанавливаются в профиль анонимного Firefox (Selenium RC), и удаленный сервер WebDriver Java (селен-сервер-standalone.jar).

Как только вы установите implicitly_wait, экземпляр WebDriver сможет нести эту конфигурацию до своего времени жизни. Чтобы установить интервал времени ожидания, вы можете:

  • Python:

    driver.implicitly_wait(5)
    
  • Java:

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

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
    

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

  • Python:

    driver.implicitly_wait(0)
    
  • Java:

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

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
    
Другие вопросы по тегам