我正在使用Cucumber JVM和Selenium,我想在Scenario Outlines中重用浏览器。 为了做到这一点,我希望我能够访问@Before和@After钩子中的场景大纲,这样我就会知道我是否仍在同一个场景大纲中,以及我是否已经到达了场景大纲的最后一行。 有没有办法做到这一点?我只看到一种获取场景的方法。我可以从场景的名称中看出它是场景大纲的一部分,但我看不到一种方法可以知道我是否在最后一个场景中,知道最后关闭浏览器而不是重用。
更新:我已经实现了以下示例,以对所有测试重复使用相同的浏览器,以加快执行时间,因为关闭和重新启动浏览器会增加大量额外时间:https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-webbit-websockets-selenium/src/test/java/cucumber/examples/java/websockets/SharedDriver.java
这让我朝着正确的方向前进,但为了提高效率,我希望能够知道我何时处于场景大纲而不是场景中,以便我可以编写自定义代码以保持登录状态,不仅可以重复使用浏览器,而且不必再次登录并导航到被测试的元素, 节省更多时间。
黄瓜提供如下@After钩
@After
public void runAfterEveryScenario(Scenario scenario){
//do something with scenario
}
我希望能够在 afterhook 中确定我是否在 ScenarioOutline 中,以便我可以在测试之间保持登录状态,如果没有,则注销。
这是我的一个大纲的简化示例,我只想在大纲的第一个场景中运行登录步骤,并且只在最后一个场景之后运行注销的@After钩子:
Scenario Outline: Grid Content Validation
Given I log in
When I navigate page
And I select <allocation> grid
Then Grid should be correctly displayed by <allocation>
Examples:
| allocation |
| choice1 |
| choice2 |
| choice3 |
| choice4 |
| choice5 |
一种选择是将浏览器引用存储在不重新创建的静态变量中。这可能会导致其他奇怪的行为,所以我不确定这是一个好主意。