我正在使用WebDriver和Firefox运行几个测试。
下面的命令遇到了问题:
WebDriver.get(www.google.com);
使用此命令,WebDriver将一直阻塞直到启动onload事件。虽然这通常需要几秒钟,但在那些从未完成加载的网站上可能需要几个小时。
我想做的是在某个超时之后停止加载页面,以某种方式模拟Firefox的停止按钮。
每次加载页面时,我都尝试执行以下JS代码:
var loadTimeout=setTimeout(\"window.stop();\", 10000);
不幸的是,这是行不通的,可能是因为:
由于加载脚本的顺序,所以STOP()方法不能停止加载包含它的文档
发布于 2018-05-18 09:43:42
我做了几件事就能绕过这件事。
首先,为Webriver设置一个超时。例如,
WebDriver wd;
... initialize wd ...
wd.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS);
第二,在执行GET时,将其包装在TimeoutException周围。(我在那里添加了一个UnhandledAlertException捕获项,只是为了更好的度量。)例如,
for (int i = 0; i < 10; i++) {
try {
wd.get(url);
break;
} catch (org.openqa.selenium.TimeoutException te) {
((JavascriptExecutor)wd).executeScript("window.stop();");
} catch (UnhandledAlertException uae) {
Alert alert = wd.switchTo().alert();
alert.accept();
}
}
这基本上是试图加载页面,但如果超时,它会迫使页面停止通过javascript加载,然后再次尝试获取页面。getCurrentUrl()
命令,它也会花费太长时间,发出警报,并要求页面在获得url之前停止加载。
发布于 2018-05-18 10:38:04
我也遇到过同样的问题,似乎没有通用的解决方案。然而,在他们的bug跟踪系统中,有一个关于它的bug
http://code.google.com/p/selenium/issues/detail?id=687
关于该bug的一个注释有一个可能对你有用的解决方法-基本上,它创建一个单独的线程,等待所需的时间,然后尝试模拟在浏览器中按转义键,但这要求浏览器窗口位于最前面,这可能是一个问题。
https://stackoverflow.com/questions/-100004522
复制相似问题