Cucumber JVM:无法访问 @After 钩子中的 ScenarioOutline



我正在使用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    | 

一种选择是将浏览器引用存储在不重新创建的静态变量中。这可能会导致其他奇怪的行为,所以我不确定这是一个好主意。

最新更新