使用browser.takeScreenshot()时,如何在预期失败时拍摄sceenshots

时间:2016-06-20 21:17:29

标签: protractor

我希望捕获屏幕截图,只要Spec失败,这是我正在使用的屏幕截图辅助函数:

var fs = require('fs');
function screenshot(filename, path) {
 // within a test:
browser.takeScreenshot().then(function (png) {
    writeScreenShot(png, filename, path);
 });
}

function writeScreenShot(data, filename, path) {
var stream = fs.createWriteStream( path+ filename);
stream.write(new Buffer(data, 'base64'));
stream.end();
}   

我的测试:

describe('this is a sample test',function(){
 var testCaseName = this.getFullName();
 it('this is sample spec1',function(){
 // Test Steps
 expect(A).toBe(B);
 });
it('this is sample spec2',function(){
 // Test Steps
 expect(A).toBe(B);
 });
});

我想在我的测试规格失败时截取屏幕截图,我该怎么做?有什么建议 ?

2 个答案:

答案 0 :(得分:8)

修改:对于Jasmine 2 ,您可以尝试https://www.npmjs.com/package/protractor-jasmine2-screenshot-reporter。这应该与最新版本的Jasmine兼容。

安装 - npm install protractor-jasmine2-screenshot-reporter --save-dev并在配置文件中注册报告。

然后捕获屏幕截图的选项是:

var reporter = new HtmlScreenshotReporter({
   captureOnlyFailedSpecs: true
});

这可能是最佳选择,因为我认为Jasmine 2不再提供currentSpec()。

对于Jasmine 1 ,您可以尝试两个选项。你可以这样做:

function screenshot(filename, path) {
  afterEach(function() {
     var passed = jasmine.getEnv().currentSpec.results().passed();
     if (!passed) {
       browser.takeScreenshot().then(function(png) {
         writeScreenShot(png, filename, path);
        });
      }
   });
}

然后在你的规范中:

describe('this is a sample test',function(){
 screenshot(filename, path);

另一个选项是https://github.com/jintoppy/protractor-html-screenshot-reporter。它处理为您截取屏幕截图并生成HTML报告。要获取有关失败的屏幕截图,您可以执行

new HtmlReporter({
    baseDirectory: '/tmp/screenshots'
    , takeScreenShotsOnlyForFailedSpecs: true
 });

答案 1 :(得分:1)

如果您想在预期失败时捕获屏幕截图,请尝试以下方法:https://www.npmjs.com/package/jasmine2-protractor-utils