如何解决如何在带有 webdriverio 的 Cucumberjs 上的钩子中使用标签?
我想在每次测试后进行新的清洁会话。 为了做到这一点,我在 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'},async function (world,result) { 等待 browser.reloadSession(); });
-
像这样将“scenario”作为这个异步函数的参数:
afterScenario:(异步函数(世界,结果,场景){ 让是最后一个标签; 场景.pickle.tags.forEach(tag => { isLastTag = tag.equals("@last"); });
if (!isLastTag) await browser.reloadSession();
});
在执行时,cucumberjs 将完整的场景信息存储在 'scenario' 中并使用它,我们可以像上面一样过滤掉
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。