我正在使用JUnit和Selenium2来测试我的应用程序。我使用在Jenkins中运行的surefire插件使用Maven执行测试。测试几周好了,我添加了越来越多的测试,现在测试失败了这条消息:
Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.11:test (default-test) on project guitest: Failure or timeout
...
Process leaked file descriptors
我首先想到的是我只是在我的代码中打开文件,例如使用WebDriver(和apache commons IO复制它们)截取屏幕截图时:
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
File destFile = new File(...);
FileUtils.copyFile(scrFile, destFile);
但即使在删除屏幕截图录制后,问题仍然存在。
你们有没有指点这里有什么问题和/或如何解决这个问题?
修改
我已经实现了一个WebdriverPool,以重用WebDrivers /浏览器实例。我在测试结束时使用关闭钩子来关闭所有打开的实例:
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run(){
for (WebDriver driver : drivers.values())
driver.close();
if (!driversInUse.isEmpty())
throw new IllegalStateException("There are still drivers in use (" + driversInUse.size() + ")");
}
});
这可能是问题吗?