当前位置: 首页 > 知识库问答 >
问题:

cucumber JVM:无法访问@After钩子中的方案大纲

马梓
2023-03-14

我使用Cucumber JVM和Selenium,我想在场景大纲中重用浏览器。为了做到这一点,我希望能够访问@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
public void runAfterEveryScenario(Scenario scenario){
    //do something with scenario
}

我希望能够在后钩子中确定我是否在场景大纲中,这样我可以在测试之间保持登录,如果不在,则注销。

这是我的一个大纲的简化示例,我只想在大纲的第一个场景中运行登录步骤,而在最后一个场景之后只运行@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个答案

孔鸿云
2023-03-14

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

 类似资料:
  • 我正在使用,并试图实现全局的方法,该方法应该在所有场景的执行完成后只执行一次。方法应该退出appium驱动程序。 目前,在每个运行场景之后执行钩子,这意味着每次都应该从头开始创建驱动程序,但我确实希望重用它。 任何帮助都将不胜感激

  • 问题内容: 我正在尝试将方法传递给子组件以处理onclick事件。我在网上看到了很多示例,但无法正常运行。当我在父级的渲染功能中并尝试将“ this.handleClick”传递给子级时,handleClick是未定义的。 看一下ThumbList的渲染方法: 知道我可能会缺少什么吗? 问题答案: 如果您在开发工作流程中使用Babel之类的编译器,则建议使用箭头函数: 如您所见,这是一个很好的紧凑

  • 我还没反应过来。我试图从REST APIendpoint发出GET请求,该endpoint应返回以下JSON: 要查询API,我使用以下代码: 我想创建一个函数,返回JSON中的注释列表。我最初的尝试如下: 但是,它给了我一个错误。从网上看,似乎大多数人的问题都可以通过将默认值设置为空字典来解决,但我已经在React钩子中这样做了。我很困惑为什么要发帖子。注释列表未定义。我还注意到,试图使用控制台

  • 我有四张桌子, 道具,上市,优惠,联系 道具有很多列表,列表属于道具 公共函数列表(){返回$this- 报价属于挂牌, 然后通过“报价”联系人表提供以下联系人 我的问题是,如何访问买家()? 像$props之类的东西- 在道具模型中,我所做的是

  • 我有一个对象类,其中有几个字段和方法,我可以在when子句中成功访问这些字段和方法: 这类似于我的口水规则的结构: IntelliJ立即抱怨说它无法解析符号$对象。仅当我执行以下操作时,该变量似乎才可访问,但无法从包装器上下文外部访问getObject()方法。 在使用drools框架时,处理变量的正确方法是什么?是否可以在包装器外部声明变量,然后在包装器内部更改其值? 上面代码工作的项目中还有其

  • 我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。