2016-09-18 6 views
1

Вместо использования:Документ завершить в RSelenium

Sys.sleep(5) 

подождать РОМ для загрузки есть ли ждать, ждать, пока этой команды

document.readyState 

дают результат "complete" поэтому дом готов

ответ

2

Selenium уже выполняет опрос document.readyState с помощью тайм-аутов. RSelenium имеет методы setTimeout. Увеличение таймаута для page load должно привести к тому, что Selenium позволит больше времени для завершения операции.

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

См

How I can check whether a page is loaded completely or not in web driver?

и

Selenium WebDriver : Wait for complex page with JavaScript(JS) to load

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

remDr$executeScript("return document.readyState == 'complete';") 

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

+0

спасибо. На самом деле есть несколько вызовов ajax, и я не могу предсказать, сколько времени они берут. Если я использую этот 'remDr $ executeScript (" return document.readyState == 'complete'; "), будет ли код ждать до завершения или у меня будет проблема с исключением? – Elen

+0

Если вызовы AJAX выставляют данные, вы можете проверить наличие этих данных. Существует асинхронная версия метода execute. Он будет ожидать, пока его метод обратного вызова не будет выполнен. Вы можете использовать это вместе с соответствующим условным обозначением JavaScript на вашем футляре, чтобы дождаться завершения вызова. Вам также нужно будет установить тайм-аут на асинхронных скриптах на соответствующее значение. – jdharrison

+0

Я попытался использовать 'setTimeout (type =" page load ", milliseconds = 10000)' и у меня загрузилась библиотека rselenium, но в ней упоминается «Ошибка: не удалось найти функцию setTimeout» ' – Elen