如何向protractor-cucumber-report添加应用数据?Reporter方法无效求助
我完全懂你的困扰——之前用selenium-cucumber-report里的Reporter.addStepLog()能轻松把自定义数据塞进报告,但换到protractor-cucumber-framework就不管用了。别着急,咱们用Cucumber原生的方法就能解决,毕竟protractor-cucumber-framework是基于Cucumber JS构建的,得顺着它的API来。
方法一:用Cucumber的attach方法直接插日志
这是最直接的方式,在你的步骤定义文件里导入Cucumber的attach函数,在需要展示数据的地方调用它就行,不管是应用里的动态数据还是自定义字符串都能塞进去。
比如你的步骤定义可以这么写:
import { Given, When, Then, attach } from 'cucumber'; Given('我打开应用并获取用户信息', async function () { // 这里是你的测试逻辑,比如获取应用内的用户数据 const userData = await element(by.id('user-info')).getText(); // 把数据附加到报告,第二个参数指定数据类型,text/plain对应纯文本格式 await attach(`获取到的用户信息:${userData}`, 'text/plain'); });
方法二:通过自定义Hook批量添加日志
如果你想在每个步骤执行完自动加日志,或者在特定钩子(比如AfterStep)里统一处理,可以写个自定义Hook文件:
创建custom-reporter.ts文件:
import { AfterStep } from 'cucumber'; AfterStep(async function (step) { // 这里可以根据步骤信息或测试上下文加自定义日志 // 比如获取当前页面URL并附加到报告 const currentUrl = await browser.getCurrentUrl(); await this.attach(`当前页面URL:${currentUrl}`, 'text/plain'); });
然后在protractor.conf.js里把这个Hook文件加入Cucumber的依赖列表:
exports.config = { // 其他配置项... framework: 'custom', frameworkPath: require.resolve('protractor-cucumber-framework'), cucumberOpts: { require: [ './src/step-definitions/**/*.ts', './src/custom-reporter.ts' // 引入自定义Hook ], format: ['json:reports/cucumber-report.json'], // 必须生成JSON格式报告,后续转HTML要用 strict: true }, // 其他配置项... };
确保报告能正确展示附加内容
最后一步,用protractor-cucumber-report把Cucumber生成的JSON报告转成HTML报告。可以在package.json里加个脚本:
{ "scripts": { "generate-report": "protractor-cucumber-report -o reports/html-report -f reports/cucumber-report.json" } }
跑完测试后执行npm run generate-report,生成的HTML报告里,每个步骤下面就会显示你附加的自定义数据了。
为啥原来的方法失效?
之前用的listener.Reporter是selenium-cucumber-js框架特有的API,而你现在用的protractor-cucumber-framework是基于原生Cucumber JS的,两者的报告机制完全不同,所以旧方法自然不管用。改用Cucumber原生的attach方法才是适配这个框架的正确姿势。
内容的提问来源于stack exchange,提问作者priyanka shaw

