如何在multiple-cucumber-html-reporter中动态获取浏览器版本
动态获取Chrome版本填充Cucumber测试报告元数据
两种实现方案,按需选择即可。
方案1:直接读取系统安装的Chrome版本
适合本地固定使用同一Chrome版本跑测试的场景,配置简单。
- 安装轻量依赖包用于读取Chrome版本:
npm install chrome-version --save-dev - 修改
cucumber-html-report.js配置,将原有同步逻辑调整为异步,等待Chrome版本读取完成后再生成报告:
const os = require('os'); const { getChromeVersion } = require('chrome-version'); const reporter = require('multiple-cucumber-html-reporter'); (async () => { // 读取当前系统Chrome完整版本号,仅取主版本号可加.split('.')[0] const chromeVer = await getChromeVersion(); const reportConfig = { // 保留原有jsonDir、reportPath、customData等所有原有配置 metadata: { browser: { name: 'chrome', version: chromeVer.split('.')[0] }, device: os.platform(), platform: { name: 'Windows', version: os.release() } } }; reporter.generate(reportConfig); })();
方案2:读取Cypress实际运行的Chrome版本
适合本地装了多个Chrome版本、或者CI环境运行测试的场景,版本号100%和实际执行测试的浏览器一致,不会出现版本不匹配问题。
- 在Cypress配置文件(
cypress.config.js)的节点事件钩子中,将运行时的Chrome版本写入临时文件:
const { defineConfig } = require('cypress'); const fs = require('fs'); const path = require('path'); module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { // 监听浏览器启动事件,捕获实际运行的浏览器信息 on('before:browser:launch', (browser) => { if (browser.family === 'chromium' && browser.name === 'chrome') { fs.writeFileSync( path.join(__dirname, '.runtime-chrome-ver'), browser.version ); } }); // 保留原有cucumber预处理器、任务注册等其他配置 }, // 原有specPattern、baseUrl等配置保留 } });
- 修改
cucumber-html-report.js,读取临时文件中的版本号,生成报告后清理临时文件:
const os = require('os'); const fs = require('fs'); const path = require('path'); const reporter = require('multiple-cucumber-html-reporter'); const verFilePath = path.join(__dirname, '.runtime-chrome-ver'); const chromeVer = fs.readFileSync(verFilePath, 'utf8').trim(); // 读取完成后删除临时文件 fs.unlinkSync(verFilePath); const reportConfig = { // 保留原有jsonDir、reportPath等所有配置 metadata: { browser: { name: 'chrome', version: chromeVer.split('.')[0] }, device: os.platform(), platform: { name: 'Windows', version: os.release() } } }; reporter.generate(reportConfig);
注意:如果需要展示完整Chrome版本号,去掉代码中
.split('.')[0]的处理即可。
内容的提问来源于stack exchange,提问作者Bhawin Joshi
相关产品推荐
相关产品推荐

