通过webdriver.io运行时如何获取失败的cucumber-js步骤行号
解决cucumber-js 7.x搭配WebdriverIO 7.x报错不显示feature文件行号问题
核心原因
cucumber-js从v6版本开始调整了默认输出格式,同时WebdriverIO的@wdio/cucumber-framework适配层默认关闭了feature文件行号的上报,导致spec reporter无法输出对应信息。
修复步骤
1. 确认依赖版本对齐
首先保证所有WebdriverIO相关依赖版本完全一致,且适配当前cucumber-js版本:
- WebdriverIO v7.x 对应支持cucumber-js 7.x,你当前使用的7.2.1版本符合适配要求
- 确保
@wdio/cucumber-framework的版本和你的@wdio/cli、@wdio/spec-reporter版本完全相同,避免兼容问题
2. 修改wdio.conf.js配置
调整cucumberOpts配置
在配置文件的cucumberOpts节点新增以下参数,保留原有配置不变:
cucumberOpts: { // 保留你的原有配置,比如require、tags等 backtrace: true, includeSource: true, formatOptions: { printSteps: true } }
调整spec reporter配置
修改reporters节点的spec reporter配置,开启行号输出:
reporters: [ ['spec', { showFullTitle: true, addConsoleLogs: true }] ]
3. 兜底方案:自定义钩子注入行号
如果以上配置后依然没有输出行号,可以通过afterStep钩子手动把行号信息追加到错误内容中,100%兼容所有场景:
在wdio.conf.js中新增以下钩子函数:
afterStep: async function (step, scenario, result) { // 仅处理失败的步骤 if (result.error) { const featureFile = step.uri result.error.message = ` Scenario: ${scenario.name} - ${featureFile}:${scenario.location.line} Step: ${step.text} - ${featureFile}:${step.location.line} Step Definition: 报错堆栈已包含对应行号 Message: ${result.error.message} ` } }
配置完成后再次执行测试,报错信息就会和旧版本4.2.1的格式完全一致,同时展示场景行号、步骤行号、报错堆栈。
内容的提问来源于stack exchange,提问作者Ryan Shillington
相关产品推荐
相关产品推荐

