Cucumber @Before 钩子运行两次 @After 一次
Cucumber @Before hook runs twice @After once
所有。
目前在写一个BDD测试自动化框架,使用Java11+Junit5+Cucumber+Selenium,构建工具:Graddle。创建了一个小测试来验证 Google 标题。开始测试时,在 Gradle 中使用 Test task
或 运行 CucumberRunner
class,在这两种情况下得到相同的结果:两次 @Before
方法被执行,一次 @After
方法被执行并且一个浏览器 windows 保持打开状态。又加了一个测试,同样的情况,只打开了4个浏览器,其中2个正在关闭。有人可以帮助解决这种情况吗?
看了一下日志,好像@Before 没有执行两次,但是 Driver
class 被初始化了两次,但是不知道为什么会这样现在...
我现在的代码:
CucumberRunner.java
:
@RunWith(Cucumber.class )
@CucumberOptions(
features = "src\test\java\features",
glue = {"steps", "utils"},
tags = "@smoke")
public class CucumberRunner {
}
Driver.java
:
public class Driver {
private WebDriver driver;
public Driver(){
driverInitialization();
}
private void driverInitialization(){
System.setProperty("webdriver.chrome.driver", "D:\Soft\selenium-drivers\chromedriver.exe");
System.out.println("Starting driver.");
var browserName = "chrome";
switch (browserName.toLowerCase()){
case "chrome":
System.out.println("Starting chrome");
driver = new ChromeDriver();
System.out.println("Before break.");
break;
case "firefox":
driver = new FirefoxDriver();
break;
default:
throw new NotFoundException("Browser not found: " + browserName);
}
}
public WebDriver getDriver(){
return driver;
}
public WebDriverWait getWebDriverWait(){
return new WebDriverWait(driver, 120);
}
public void terminateDriver(){
System.out.println("Terminating driver.");
if (driver != null) {
driver.close();
driver.quit();
}
}
}
Hooks.java
:
public class Hooks {
private Driver driver;
@Before
public void setup(){
System.out.println("In the Setup method.");
driver = new Driver();
}
@After
public void tearDown(){
System.out.println("In the TearDown method.");
driver.terminateDriver();
}
}
我认为你的 Hook Class 应该是这样的,因为你正在使用 selenium-picocontainer DI。
public class Hooks {
private Driver driver;
public Hooks(Driver driver) {
this.driver = driver;
}
@Before
public void setup(){
System.out.println("In the Setup method.");
}
@After
public void tearDown(){
System.out.println("In the TearDown method.");
driver.terminateDriver();
}
}
所有。
目前在写一个BDD测试自动化框架,使用Java11+Junit5+Cucumber+Selenium,构建工具:Graddle。创建了一个小测试来验证 Google 标题。开始测试时,在 Gradle 中使用 Test task
或 运行 CucumberRunner
class,在这两种情况下得到相同的结果:两次 @Before
方法被执行,一次 @After
方法被执行并且一个浏览器 windows 保持打开状态。又加了一个测试,同样的情况,只打开了4个浏览器,其中2个正在关闭。有人可以帮助解决这种情况吗?
看了一下日志,好像@Before 没有执行两次,但是 Driver
class 被初始化了两次,但是不知道为什么会这样现在...
我现在的代码:
CucumberRunner.java
:
@RunWith(Cucumber.class )
@CucumberOptions(
features = "src\test\java\features",
glue = {"steps", "utils"},
tags = "@smoke")
public class CucumberRunner {
}
Driver.java
:
public class Driver {
private WebDriver driver;
public Driver(){
driverInitialization();
}
private void driverInitialization(){
System.setProperty("webdriver.chrome.driver", "D:\Soft\selenium-drivers\chromedriver.exe");
System.out.println("Starting driver.");
var browserName = "chrome";
switch (browserName.toLowerCase()){
case "chrome":
System.out.println("Starting chrome");
driver = new ChromeDriver();
System.out.println("Before break.");
break;
case "firefox":
driver = new FirefoxDriver();
break;
default:
throw new NotFoundException("Browser not found: " + browserName);
}
}
public WebDriver getDriver(){
return driver;
}
public WebDriverWait getWebDriverWait(){
return new WebDriverWait(driver, 120);
}
public void terminateDriver(){
System.out.println("Terminating driver.");
if (driver != null) {
driver.close();
driver.quit();
}
}
}
Hooks.java
:
public class Hooks {
private Driver driver;
@Before
public void setup(){
System.out.println("In the Setup method.");
driver = new Driver();
}
@After
public void tearDown(){
System.out.println("In the TearDown method.");
driver.terminateDriver();
}
}
我认为你的 Hook Class 应该是这样的,因为你正在使用 selenium-picocontainer DI。
public class Hooks {
private Driver driver;
public Hooks(Driver driver) {
this.driver = driver;
}
@Before
public void setup(){
System.out.println("In the Setup method.");
}
@After
public void tearDown(){
System.out.println("In the TearDown method.");
driver.terminateDriver();
}
}