如何检查页面是否在RSelenium中完成加载

时间:2014-11-22 18:28:26

标签: r selenium selenium-webdriver

想象一下,您在页面上使用RSelenium单击元素,并希望从结果页面中检索结果。如何检查以确保生成的页面已加载?我可以在处理页面和单击元素之间插入Sys.sleep(),但这似乎是一种非常难看和缓慢的做事方式。

3 个答案:

答案 0 :(得分:5)

设置ImplicitWaitTimeout,然后在页面上搜索元素。来自?remoteDriver

  

setImplicitWaitTimeout(毫秒= 10000)

     

设定时间   搜索元素时,驱动程序应该等待。搜索时   在单个元素中,驱动程序将轮询页面直到元素为止   发现或超时到期,以先发生者为准。搜索时   对于多个元素,驱动程序应至少轮询页面   找到一个元素或超时到期,此时它将会到期   返回一个空列表。如果从未调用此方法,则驱动程序将执行   默认为0ms的隐式等待。

答案 1 :(得分:2)

在RSelenium参考手册(http://cran.r-project.org/web/packages/RSelenium/RSelenium.pdf)中,您将找到remoteDriver类的方法setTimeout():

  

setTimeout(type =“page load”,milliseconds = 10000)

     

配置特定类型的操作在中止之前可以执行的时间量和| Timeout |错误将返回给客户端。

     

type:设置超时的操作类型。有效值包括:脚本超时的“脚本”,修改隐式等待超时的“隐式”和设置页面加载超时的“页面加载”。默认为“页面加载”

     

毫秒:允许限时命令运行的时间量(以毫秒为单位)。默认为10000毫秒。

这似乎表明remDr $ navigate(“...”)之后的remDr $ setTimeout()实际上会等待页面加载,或者在10秒后返回超时错误。

答案 2 :(得分:1)

您还可以尝试使用此代码等待浏览器提供是否加载页面。

objExecutor = (JavascriptExecutor) objDriver;
if (!objExecutor.executeScript("return document.readyState").toString()
    .equalsIgnoreCase("complete")){
    Thread.sleep(1000);
}

您可以简单地将其放在基页中,这样您就不需要在每个页面对象中将其写下来。我从来没有尝试过任何支持AJAX的网站,但这可能对你有所帮助,你的场景依赖也会消失。