想象一下,您在页面上使用RSelenium
单击元素,并希望从结果页面中检索结果。如何检查以确保生成的页面已加载?我可以在处理页面和单击元素之间插入Sys.sleep()
,但这似乎是一种非常难看和缓慢的做事方式。
答案 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的网站,但这可能对你有所帮助,你的场景依赖也会消失。