Как заставить селен ждать полной загрузки страницы в Selenium-wrapper для Excel VBA?

Какой код или функция для Selenium-wrapper для Excel VBA используется для того, чтобы программа дождалась загрузки страницы, а затем выполнила другие команды?

Короткий ответ

Selenium (также оболочка ExcelVBA) делает это для вас. Он ожидает, что DOM readyState что он завершен.

В случае Excel-Wrapper это будет сделано при вызове driver.start

НО

Это не поможет вам, если у вас есть AJAX-вызовы или элементы, которые загружаются с помощью JavaScript и т. Д.

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

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

Если вы подробно остановитесь на своей реальной проблеме, мы можем дать вам более подробные советы.

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

Первый – klunky, но простой: после моего .get или .click которое инициирует загрузку страницы, я приостанавливаю код с помощью сообщения: msgBox "Wait for page to load then click OK."

Второй – немного более изысканный. Если я знаю, что моя страница обычно занимает 50 секунд для загрузки, я поставлю в установленный период ожидания, скажем, 45 секунд, а затем проверит скрипт, что определенный элемент загрузился, прежде чем продолжить:

 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) sub LongLoad() Dim driver As New SeleniumWrapper.WebDriver Dim By As New By, Assert As New Assert, Verify As New Verify, Waiter As New Waiter dim YesNo as boolean driver.Start "chrome", "https://super.secret.com/" driver.setImplicitWait 5000 driver.setTimeout 120000 driver.Get "/heroLogin" driver.findElementByName("USER").Clear driver.findElementByName("USER").SendKeys "user" driver.findElementByName("PASSWORD").Clear driver.findElementByName("PASSWORD").SendKeys "pass" driver.findElementById("Button").Click 'pause for 45 seconds (see if you can hold your breath) Sleep 45000 'poll for the presence of an element. In my case a certain string of 'text is good enough. driver.verifyTextPresent ("Enterprise Reporting") 'now you're ready to go. 

.verifyTextPresent также имеет тайм-аут в 30 секунд, поэтому вам все равно придется сначала использовать функцию сна для медленных нагрузок страниц.

Последняя версия ждет неявно, что целевой элемент присутствует до выполнения требуемого действия. Например, driver.FindElementById ("…"). Щелчок по умолчанию попытается найти элемент в течение 3 секунд, прежде чем выбросить ошибку.

Это неявное ожидание может быть определено глобально:

 driver.Timeouts.ImplicitWait = 5000 ' 5 seconds 

Как и индивидуально:

 driver.FindElementById("id", timeout:=10000).Click ' implicitly wait of 10sec driver.FindElementById("id", timeout:=0).Click ' no implicit waiting 

Чтобы установить тайм-аут для сервера, на котором запущен браузер:

 driver.Timeouts.Server = 120000 ' 2 mins 

Чтобы получить последнюю версию на сегодняшний день, работая с приведенным выше примером: https://github.com/florentbr/SeleniumBasic/releases/latest

Привет, используя эту ссылку wait-for-page-load-in-selenium

Я разработал этот код:

 While Selenium.ExecuteScript("return document.readyState") <> "complete" Selenium.Wait (5000) Wend 

Похоже, что лучший способ – псевдокод: Wait until a specific FindElementbyId appears . Представленное решение представляет собой общий подход.

  • Force Selenium Basic щелкнуть элемент, который не отображается
  • Выбор одного значения из раскрывающегося списка
  • Выберите значение на странице в соответствии с таблицей - Java - Selenium Webdriver
  • Аутентификация входа пользователя в селен?
  • Как создать новый лист в файле excel с помощью apache poi в selenium webdriver с java
  • Как получить числовое и строковое значение из ячейки файла excel, используя POI, я получаю ошибку для числового значения, строковое значение легко извлекает
  • Как обрабатывать ошибки Excel с помощью Visual Studio?
  • Selenium Webdriver, TestNG - поставщик данных пытается передать параметр 2, но метод принимает 3, а TestNG не может вставить подходящий объект
  • Java - получить временную метку из файла excel без преобразования в десятичную
  • Совпадения данных, хотя программа ставит resukt FALSE в веб-драйвер excel-Selenium
  • Автоматизированный тестовый пример с вводом и выводом из Excel
  • Interesting Posts

    Найти соответствующее значение ячейки в именованном диапазоне

    VBA: повторная сортировка / переупорядочение строк на основе значений столбцов через определенный диапазон

    VBA для копирования текста из Excel в определенное место в текстовом файле

    Есть ли способ настроить начальную позицию просмотра в листе excel?

    xlsxwriter пересекают форматы строк и столбцов

    VLOOKUP вернет # N / A, когда в значении ячейки есть период

    Копировать строку, в которой ячейка соответствует имени листа листа. Заклинатель выходит за пределы диапазона (Ошибка 9)

    Сравнение формул Excel

    Установка точности при чтении значений из Excel в C #

    удалять макросы excel из нескольких закрытых файлов

    Графический макрос VBA с кнопкой

    ClosedXML C # Как получить условное форматирование для excel для остановки, когда true

    Включить имя исходного листа в лист вывода

    Получение сообщения для обозначения конкретной колонки

    Как я могу выбрать значение в зависимости от другого значения без IF (несколько значений)

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