如何使用 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 标记的所有测试的挂钩时,没有任何反应。我在这里做错了什么?
我们可以通过两种方式处理:
使用 ~ 而不是 not like(可能行不通):
afterScenario: ({tags: '~@last'}, 异步函数 (world,result) {
等待 browser.reloadSession();
});
将 'scenario' 作为此异步函数的参数,如下所示:
afterScenario:(异步函数(世界,结果,场景){
让 isLastTag;
scenario.pickle.tags.forEach(标签 => {
isLastTag = tag.equals("@last");
});
if (!isLastTag)
await browser.reloadSession();
});
在执行时,cucumberjs 将完整的场景信息存储在 'scenario' 中,并使用它,我们可以像上面那样过滤掉
我想在每次测试后都有一个新的清理会话。 为此,我在 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 标记的所有测试的挂钩时,没有任何反应。我在这里做错了什么?
我们可以通过两种方式处理:
使用 ~ 而不是 not like(可能行不通):
afterScenario: ({tags: '~@last'}, 异步函数 (world,result) { 等待 browser.reloadSession(); });
将 'scenario' 作为此异步函数的参数,如下所示:
afterScenario:(异步函数(世界,结果,场景){ 让 isLastTag; scenario.pickle.tags.forEach(标签 => { isLastTag = tag.equals("@last"); });
if (!isLastTag) await browser.reloadSession();
});
在执行时,cucumberjs 将完整的场景信息存储在 'scenario' 中,并使用它,我们可以像上面那样过滤掉