Protractor 如何使用browser.takeScreenshot()仅在expect失败时拍摄SCeenshot

Protractor 如何使用browser.takeScreenshot()仅在expect失败时拍摄SCeenshot,protractor,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, filenam

我想在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》,你可以试试。这应该与Jasmine的最新版本兼容

要安装-npm install gragrator-jasmine2-screenshot-reporter-保存开发并在配置文件中注册报告

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

var reporter = new HtmlScreenshotReporter({
   captureOnlyFailedSpecs: true
});
这可能是最好的选择,因为我认为currentSpec不再适用于Jasmine 2

对于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);
另一个选择是。它为您处理截图并生成html报告。为了拍摄失败的截图,你会这么做的

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

如果您想在预期失败时捕获屏幕截图,请尝试以下操作:

jasmine.getEnv.currentSpec返回undefined.hi@mallory我尝试使用HtmlReporter,但即使测试失败,它也不会创建任何屏幕截图。hi@soniasharma,这可能是由于使用了jasmine的版本。我编辑了这篇文章以反映Jasmine1和Jasmine2的选项。嗨@Mallory,我试图使用Jasmine2屏幕截图报告器,但它仍然没有生成html报告或屏幕截图:这是我的配置文件:onPrepare:function{var htmlscreenshorteporter=require'dragor-jasmine2-screenshot-reporter';var reporter=new htmlscreenshorter{dest:'tests/test results/screenshots',filename:'my report.html',captureOnlyFailedSpecs:true};},我在这里做错了什么解决了我使用return browser.getProcessedConfig.thenfunctionconfig{var HtmlScreenshorter=require'dragrator-jasmine2-screenshot-reporter';var reporter=new HtmlScreenshorter{dest:'tests/test results/screenshots',filename:'my report.html',captureOnlyFailedSpecs:true};jasmine.getEnv.addReporterreporter;};它成功了:非常感谢@Mallory