我们正在使用Selenium WebDriver和Cucumber一起进行UI测试。语言是Groovy,构建工具是Gradle。因为创建WebDriver实例的代价很高,所以我们只想实例化一个WebDriver实例并在所有测试中使用它。但是,在完成所有测试后,我们无法正确退出驱动程序。也就是说,在测试期间生成的浏览器进程在运行所有测试后仍然存在。
代码目前的结构如下所示。
// Test base class
class UITestBase {
WebDriver driver
static {
init()
}
static void init() {
// instantiate a webdriver
}
}
// Entry class of cucumber run
RunWith( Cucumber )
Cucumber.Options(...)
class CukeRunEntry {}
// Cucumber step class
class WhenSteps extends UITestBase {
@When(/^something happens$/)
void something_happens() {
// step implmentation
}
}
那么,如何在所有测试完成之后但在gradle完成测试任务之前调用driver.quit()
(我们从命令行使用./gradlew test
运行测试)?我尝试重写finalize()
方法,但这没有帮助。
非常感谢。
答案 0 :(得分:3)
如果我是你,我更愿意使用SharedDriver
,你可以在这里找到=> https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-webbit-websockets-selenium/src/test/java/cucumber/examples/java/websockets/SharedDriver.java
让生活更轻松。
修改强>
如果您不想使用SharedDriver
,可以在UITestBase
类中添加如下所示的块,如问题所示:
private static final Thread CLOSE_THREAD = new Thread() {
@Override
public void run() {
try {
driver.quit()
} catch ( Exception e ) {
}
}
}
static {
init()
Runtime.getRuntime().addShutdownHook(CLOSE_THREAD)
}
以上代码基本上是SharedDriver中用于确保安全关闭WebDriver实例的代码。