【发布时间】:2016-07-12 05:58:14
【问题描述】:
我是量角器的新手,想在浏览器中截取我失败的测试用例的屏幕截图。
你能帮我建议我应该怎么做吗?
谢谢你:)
【问题讨论】:
标签: javascript node.js testing protractor
我是量角器的新手,想在浏览器中截取我失败的测试用例的屏幕截图。
你能帮我建议我应该怎么做吗?
谢谢你:)
【问题讨论】:
标签: javascript node.js testing protractor
您可以为此使用protractor-jasmine2-screenshot-reporter 模块,它有一些很好的功能可以满足您的目的。
var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter');
var reporter = new HtmlScreenshotReporter({
dest: 'target/screenshots',
filename: 'my-report.html',
captureOnlyFailedSpecs: true
});
这将在您的规格失败时捕获屏幕截图,您有更多选择,您可以查看此链接:https://www.npmjs.com/package/protractor-jasmine2-screenshot-reporter
【讨论】:
下面的代码可以放在protractor.conf.js的exports.config块中:
const fs = require('fs');
. . .
exports.config = {
. . .
onPrepare: function() {
jasmine.getEnv().addReporter({
specDone: function(result) {
browser.takeScreenshot().then(function(screenShot) {
// Saving File.
// Param filePath : where you want to store screenShot
// Param screenShot : Screen shot file which you want to store.
fs.writeFile(filePath, screenShot, 'base64', function (err) {
if (err) throw err;
console.log('File saved.');
});
});
}
});
}
希望对你有帮助! :)
同样,如果您希望它仅在失败时截取屏幕截图,您可以将 takeScreenshot 调用置于与 result.failedExpectations.length 大于 0 的条件匹配:
jasmine.getEnv().addReporter({
specDone: (result) => {
if(result.failedExpectations.length > 0) {
browser.takeScreenshot().then((screenShot) => {
fs.writeFile('./protractorFailure.png', screenShot, 'base64', (err) => {
if (err) throw err;
});
});
}
}
});
【讨论】:
protractor-beautiful-reporter 能够构建漂亮的 html 报告,包括屏幕截图。
安装:
npm install protractor-beautiful-reporter --save-dev
protractor.conf.js中的配置:
const HtmlReporter = require('protractor-beautiful-reporter');
exports.config = {
// your config here ...
onPrepare: function() {
jasmine.getEnv().addReporter(new HtmlReporter({
baseDirectory: 'target/screenshots',
takeScreenShotsOnlyForFailedSpecs: true
}).getJasmine2Reporter());
}
}
【讨论】:
如果您在 protractor.conf.js 中使用 framework: 'custom',那么使用 Jasmine 或 Jasmine 报告器似乎不起作用。
你可以在你的 post-test hook 中做如下的事情(例如 cucumber.After):
protractor.browser.takeScreenshot().then(function(screenshot) {
const screenshots = path.join(process.cwd(), 'e2e/reports/screenshots');
fs.writeFile(screenshots + '/test.png', screenshot, 'base64', function (err) {
if (err) {
throw err;
}
console.log('File saved.');
});
});
【讨论】: