如何使用 webdriverio 在 cucumberjs 的钩子中使用标签?

How to use tags in hooks on cucumberjs with webdriverio?

我想在每次测试后都有一个新的清理会话。 为此,我在 afterScenario 挂钩

中使用了 reloadSession()
 afterScenario: ({tags: 'not @last'}, async function (world,result) {
        await browser.reloadSession();
    })

但是,我不希望在最后一个场景中触发此挂钩(如果不需要,我不希望重新加载额外的会话)所以我将我在功能文件上的最后一个测试标记为@last。

  @last
  Scenario: An anonymous user cannot login with the wrong credentials
    Given I am on the 'login' page
    When I login with invalid credentials
      | username  | password      |
      | wrongUser | wrongPassword |
    Then I should the following error message
      | error                                        |
      | Error: Incorrect login or password provided. |

当我尝试这样做并且 运行 没有 @last 标记的所有测试的挂钩时,没有任何反应。我在这里做错了什么?

我们可以通过两种方式处理:

  1. 使用 ~ 而不是 not like(可能行不通):

    afterScenario: ({tags: '~@last'}, 异步函数 (world,result) { 等待 browser.reloadSession(); });

  2. 将 'scenario' 作为此异步函数的参数,如下所示:

    afterScenario:(异步函数(世界,结果,场景){ 让 isLastTag; scenario.pickle.tags.forEach(标签 => { isLastTag = tag.equals("@last"); });

             if (!isLastTag)
             await browser.reloadSession();
    

    });

在执行时,cucumberjs 将完整的场景信息存储在 'scenario' 中,并使用它,我们可以像上面那样过滤掉