ProfilesIni profile = new ProfilesIni();
FirefoxProfile ff = profile.getProfile("ScreenCapture");
WebDriver driver = new FirefoxDriver(ff);
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get(url);
Thread.sleep(8000);
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
driver.quit();
不应该 driver.manage()。timeouts()。implicitlyWait(15,TimeUnit.SECONDS); 15秒后强制关闭selenium生成的Firefox浏览器?浏览器只是坐着说它传输数据一小时+。基本上只是挂着说转移...
我正在捕获ajax重页,这就是为什么我要求所有内容在页面加载后等待8秒。但这应该与司机在15秒后强制关闭无关。
我哪里错了?
详情:Centos x64 6.4 with Firefox 10.0.12和最新的Selenium截至10分钟前。
我能用Java做些什么来解决这个问题吗?
问题:如何在N秒后强制关闭Selenium生成的Firefox窗口?
答案 0 :(得分:2)
如果您将Junit与Java一起使用,那么可以这样: -
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
注意: - 要获得应该如何编写的完整框架,只需下载用于FF的selenium IDE并将一些测试用例导出到Java / jUnit。
答案 1 :(得分:2)
我的linux知识有限,但您可以通过运行linux命令pkill来终止进程。
driver.quit();
Thread.sleep(15000); //use a poll loop instead to check process running every 1 sec
Runtime rt = Runtime.getRuntime();
rt.exec("pkill firefox");
我认为java进程需要有足够的权限来终止进程,但还没有尝试过。
答案 2 :(得分:0)
为了跟进 Ardesco 的评论,示例如下:
ProfilesIni profile = new ProfilesIni();
FirefoxProfile ff = profile.getProfile("ScreenCapture");
WebDriver driver = new FirefoxDriver(ff);
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
try {
driver.get(url);
} catch (TimeoutException e) {
System.out.println("15 seconds were over, force continue!");
} finally {
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
driver.quit();
}
try 部分将运行请求,但是当超过 pageLoadTimeout 设置的超时时间时,会抛出异常,我们捕获。 finally 部分将运行,无论请求的页面是否在 15 秒内正确加载或是否引发异常。
答案 3 :(得分:-1)
隐式等待不会在15秒后强制关闭浏览器。
隐式等待在尝试在DOM中查找元素时使用,在尝试加载页面时不使用。如果希望Selenium在15秒后停止尝试加载页面,则需要设置pageLoadTimeout,其用法如下:
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
默认页面加载超时为0(这意味着无限期等待),因此您将看到此行为。
(显然,这里假设您使用的驱动程序二进制文件已实现此方法。)
Selenium中超时的JavaDoc可用Here