我正在使用 JUnit 和 Selenium2 来测试我的应用程序。我使用 Maven 和在 Jenkins 中运行的 surefire 插件执行测试。几周后测试很好,我添加了越来越多的测试,现在测试失败并显示以下消息:
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() + ")");
}
});
这可能是问题吗?