Вопросы о неявных ожиданиях в Selenium Webdriver - PullRequest
2 голосов
/ 21 января 2020

Я читаю документы по неявному ожиданию с Webdriver, но я не уверен, что полностью понимаю.

Насколько я понимаю,

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

Это создаст время ожидания 10 секунд при поиске любого элемента.

Что именно это делает?

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

  • Так как это применяется к каждому элементу, Правильно ли я полагаю, что это выполняется только один раз для каждого экземпляра Webdriver?

Ответы [ 2 ]

4 голосов
/ 21 января 2020

Это будет искать элемент в течение 10 секунд, пытаясь найти его каждые 500 миллисекунд (время ожидания по умолчанию).

Из документов

Определяет время, которое драйвер должен ожидать при поиске элемента, если он не присутствует немедленно.

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

Алгоритм определения местоположения описан в W3 C спецификациях

Команды «Найти элемент», «Найти элементы», «Найти элемент из элемента» и «Найти элементы из элемента» позволяют выполнять поиск отдельных элементов и наборов элементов. Поиск элементов выполняется с использованием обхода по предварительному заказу узлов документа, которые соответствуют предоставленному выражению селектора. Элементы сериализуются и возвращаются как веб-элементы.

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

  1. Пусть время окончания - текущее время плюс неявное время ожидания сеанса.

  2. Пусть стратегия определения местоположения будет равна использованию.

  3. Пусть селектор будет равен значение.

  4. Пусть возвращаемые элементы будут результатом попытки вызвать соответствующую стратегию расположения элемента с аргументами начального узла и селектора.

  5. Если DOMException, SyntaxError, XPathException или другая ошибка возникает во время выполнения стратегии определения местоположения элемента, верните ошибочный селектор с ошибкой возврата.

  6. Если возвращаемые элементы пусты, а текущее время меньше конца время вернемся к шагу 4. В противном случае перейдите к следующему шагу.

  7. Пусть результат будет пустым JSON List.

  8. Для каждого элемент в элементах ре поверните, добавьте сериализацию элемента к результату.

  9. Возвратите успех с результатом данных.

implicitlyWait определяется один раз для WebDriver и последний его срок жизни.

2 голосов
/ 21 января 2020

Определяет время ожидания глобально в вашем проекте. Вы говорите своему водителю ждать n секунд, прежде чем селен выдает исключение. Если элемент найден раньше, чем n секунд, которые вы упомянули, вебдрайвер щелкнет по нему, как только он станет доступным, и не будет ждать максимального количества n секунд. Он должен ждать, пока не сгенерирует исключение.

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