求助:protractor-jasmine2-screenshot-reporter无法生成截图至指定文件夹
排查Protractor截图报告不生成的问题
先看一下你的配置文件,我发现几个可能导致截图不生成的点,咱们一个个来排查:
首先贴出你的配置代码方便参考:
// Protractor configuration file const { SpecReporter } = require('jasmine-spec-reporter'); var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter'); var fs = require('fs'); var reporter = new HtmlScreenshotReporter({ dest: 'target/screenshots', filename: 'my-report.html', cleanDestination: false, showSummary: true, showConfiguration: false, reportTitle: null, ignoreSkippedSpecs: false, captureOnlyFailedSpecs: false, reportOnlyFailedSpecs: false }); exports.config = { allScriptsTimeout: 11000, specs: [ './e2e/**/*.e2e-spec.ts' ], capabilities: { 'browserName': 'chrome' }, directConnect: false, baseUrl: 'http://localhost:4200/', framework: 'jasmine', chromeOnly: true, seleniumAddress: 'http://localhost:4444/wd/hub', specs: ['spec.js'], // 这里存在重复的specs配置! jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000, print: function() {} }, onPrepare() { require('ts-node').register({ project: 'e2e/tsconfig.e2e.json' }); jasmine.getEnv().addReporter(reporter); }, afterLaunch: function(exitCode) { return new Promise(function(resolve){ reporter.afterLaunch(resolve.bind(this, exitCode)); }); } };
1. 重复的specs配置是核心问题
你在exports.config里定义了两次specs属性:
- 第一次指向你的Angular E2E测试文件
./e2e/**/*.e2e-spec.ts - 第二次是
['spec.js'],这个会直接覆盖前面的配置!
如果你的项目里没有spec.js文件,或者这个文件是空的/没有可执行的测试用例,Protractor相当于没跑任何测试,自然不会生成截图。解决办法:删掉第二个specs: ['spec.js'],保留正确的测试文件路径。
2. 冲突的浏览器连接配置
你同时设置了三个存在冲突的连接相关配置:
directConnect: falseseleniumAddress: 'http://localhost:4444/wd/hub'chromeOnly: true
其中chromeOnly已经被Protractor废弃,建议直接删掉。另外directConnect和seleniumAddress是互斥的:
- 如果用
directConnect: true,Protractor会直接连接ChromeDriver,不需要额外启动Selenium Server - 如果用
seleniumAddress,你需要确保Selenium Server已经在http://localhost:4444/wd/hub正常运行
建议简化配置:删掉chromeOnly: true,然后根据你的场景选一种连接方式,比如用directConnect更省心:
directConnect: true, // 注释或删除下面这行 // seleniumAddress: 'http://localhost:4444/wd/hub',
3. 确认Reporter的初始化状态
可以在onPrepare里加个日志,确认截图Reporter是否被正确加载:
onPrepare() { require('ts-node').register({ project: 'e2e/tsconfig.e2e.json' }); console.log('正在添加截图报告器...'); jasmine.getEnv().addReporter(reporter); console.log('截图报告器添加成功'); }
运行测试时看控制台有没有这两行日志,能快速确认Reporter的加载状态。
4. 检查依赖版本兼容性
如果上面的修改都没用,可能是Protractor和protractor-jasmine2-screenshot-reporter的版本不兼容。比如Protractor 7.x及以上需要搭配最新版本的截图报告器,可以尝试更新依赖:
npm update protractor protractor-jasmine2-screenshot-reporter
5. 确认测试用例正常执行
确保你的./e2e/**/*.e2e-spec.ts里有可执行的测试用例,比如:
describe('Angular App', () => { it('应该显示欢迎标题', () => { browser.get('/'); expect(element(by.css('h1')).getText()).toEqual('Welcome'); }); });
如果测试用例根本没执行,自然不会生成任何截图。
按照上面的步骤修改后,重新运行Protractor,应该就能正常生成截图和报告了。
内容的提问来源于stack exchange,提问作者hondvryer
相关产品推荐
相关产品推荐

