我使用了已接受的解决方案here并提出了以下代码:
参考图书馆:
功能
Feature: FeatureA
Scenario: ScenarioA
Given
When
Then
Scenario: ScenarioB
Given
When
Then
BaseStep:
public class BaseStep {
protected WebDriver driver = null;
private static boolean isInitialized = false;
@Before
public void setUp() throws Exception {
if (!isInitialized) {
driver = SeleniumUtil.getWebDriver(ConfigUtil.readKey("browser"));
isInitialized = true;
}
}
@After
public void tearDown() {
driver.quit();
}
}
步骤A:
public class StepA {
private BaseStep baseStep = null;
private WebDriver driver = null;
// PicoContainer injects BaseStep class
public StepA(BaseStep baseStep) {
this.baseStep = baseStep;
}
@Given("^I am at the Login page$")
public void givenIAmAtTheLoginPage() throws Exception {
driver = baseStep.driver;
driver.get(ConfigUtil.readKey("base_url"));
}
@When
@When
@Then
@Then
}
然而,司机"死了"在ScenarioA的tearDown()
之后,在ScenarioB的给定步骤上变为null(两个场景都使用相同的Given)。我没有使用Maven。
答案 0 :(得分:2)
这是因为这一行:
private static boolean isInitialized = false;
对于每个场景,cucumber为每个涉及的步骤文件创建一个新实例。因此,当场景开始时,driver
中的BaseStep
始终为空。
静态isInitialized
布尔值不是实例的一部分,它绑定到它所在的类,并且它一直处于活动状态,直到JVM关闭。第一个方案将其设置为true
,这意味着当第二个方案启动时它仍然是true
,并且它不会在setUp()
方法中重新初始化驱动程序。
您可能希望使driver
静态与两种方案共享相同的实例。
答案 1 :(得分:0)
从卢西亚诺的回答中,这就是我最终的结果:
功能强>
Feature: FeatureA
Scenario: ScenarioA
Given I am at the Login page
When
Then
Scenario: ScenarioB
Given I am at the Login page
When
Then
Feature: FeatureB
Scenario: ScenarioC
Given I am at the Login page
When
Then
<强> BaseStep:强>
public class BaseStep {
protected WebDriver driver = null;
@Before
public void setUp() throws Exception {
driver = SeleniumUtil.getWebDriver(ConfigUtil.readKey("browser"));
}
@After
public void tearDown() {
driver.quit();
}
}
<强>步骤:强>
public class FeatureAStep {
private WebDriver driver = null;
// PicoContainer injects BaseStep class
public FeatureAStep(BaseStep baseStep) {
this.driver = baseStep.driver;
}
@Given("^I am at the Login page$")
public void givenIAmAtTheLoginPage() throws Exception {
driver.get(ConfigUtil.readKey("base_url"));
}
@When
@When
@Then
@Then
}
public class FeatureBStep {
private WebDriver driver = null;
// PicoContainer injects BaseStep class
public FeatureBStep(BaseStep baseStep) {
this.driver = baseStep.driver;
}
@When
@Then
}
我有2个功能文件和2个步骤定义类。 ScenarioC与FeatureAStep中定义的场景A和B共享相同的给定。在FeatureBStep中定义ScenarioC的时间和时间。我没有使用PicoContainer在BaseStep中使WebDriver静态化。两个Feature文件都成功执行。
相关阅读: