黄瓜JVM:无法访问@After钩子

时间:2016-02-22 17:47:28

标签: selenium-webdriver cucumber cucumber-jvm

我正在将Cucumber JVM与Selenium一起使用,我想在Scenario Outlines中重用浏览器。为了做到这一点,我希望我能够访问@Before和@After钩子中的Scenario Outline,这样我就知道我是否还在同一个场景大纲中,如果我已经到达了场景的最后一行大纲。有没有办法做到这一点?我只看到了获得场景的方法。我可以从Scenario的名称中看出它是Scenario Outline的一部分,但是我没有办法知道我是否在最后一个场景中知道最后关闭浏览器而不是重用。< / p>

更新: 我已经实现了以下示例,以便为所有测试重用相同的浏览器,以加快执行时间,因为关闭并重新启动浏览器可能会增加大量额外时间:https://github.com/cucumber/cucumber-jvm/blob/master/examples/java-webbit-websockets-selenium/src/test/java/cucumber/examples/java/websockets/SharedDriver.java

这让我朝着正确的方向前进,但为了增加效率,我希望能够知道我何时处于场景大纲而不是场景,以便我可以编写自定义代码来保持登录不仅重复使用浏览器,而且不必再次登录并导航到被测元素,节省更多时间。

Cucumber提供@After钩子如下

@After
public void runAfterEveryScenario(Scenario scenario){
    //do something with scenario
}

我希望能够在事后挂钩中确定我是否在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    | 

1 个答案:

答案 0 :(得分:0)

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