【问题标题】:Cucumber JVM: Cannot get access to ScenarioOutline in @After hooksCucumber JVM:无法访问 @After 挂钩中的 ScenarioOutline
【发布时间】:2016-02-22 17:47:27
【问题描述】:

我正在使用带有 Selenium 的 Cucumber JVM,我想在 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

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

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    | 

【问题讨论】:

  • 你能分享你试图运行的代码吗?举个例子可能会让您更容易理解您的问题。

标签: selenium-webdriver cucumber cucumber-jvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2022-01-02
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多