如何使用Protractor在Cucumberjs中嵌入屏幕截图?

时间:2015-09-29 09:23:42

标签: jenkins protractor cucumberjs

我尝试使用以下(require srfi/13) (string-pad (number->string 23) 4 #\0) ; ==> "0023" 获取code并将其保存在本地。但是,我想将屏幕截图嵌入到screenshot(由cucumber HTML report使用Jenkins文件生成)。

我应该在json添加哪些代码,这些代码应反映在我的embedding报告文件中,以便在json报告中获取该链接?请建议。

我的代码:

HTML

2 个答案:

答案 0 :(得分:1)

根据https://github.com/cucumber/cucumber-js#attachments

的文件
  

您可以使用方案对象将文本,图像和文件附加到Cucumber报告中:

在stepResult挂钩期间,无法在After hook中附加屏幕截图。

this.After(function(scenario, next) {
  browser.takeScreenshot().then(function(png) {
    var decodedImage = new Buffer(png, 'base64').toString('binary');
    scenario.attach(decodedImage, 'image/png', next);
  }, function(err) {
    next(err);
  });
});

答案 1 :(得分:1)

您只能在方案的挂钩后附加,但是您可以在每个步骤(在StepResult中)截取屏幕截图,如果这是您所追求的并将结果存储/推送到数组中。然后,您可以在每个场景结束时将阵列内容作为附件推送,并清除阵列以用于下一个步骤场景。

您还可以根据每个步骤/页面的内容获取动态屏幕截图/浏览器高度。见下文。

在你有钩子的文件中,执行以下操作:

'use strict';

var eachStepScreensArr = [];

module.exports = function() {

    this.Before(() => {

        //Reset Array with Step screenshots
        eachStepScreensArr = [];

    });

    this.After((scenario) => {

        return browser.driver.manage().window().setSize(1280, 1000).then(function() { //reset size after each scenario
            return browser.driver.manage().window().setPosition(0, 0).then(function() { //reset position after each scenario
                //Attach any step screenshots to the scenario metadata
                for (var key in eachStepScreensArr) {
                    scenario.attach(eachStepScreensArr[key], 'image/png');
                }
            });
        });

        return Promise.resolve();
    });

    this.StepResult((stepResult) => {
        var step = stepResult.getStep();

        if (step.getName() && stepResult.getStatus() !== 'skipped') {

            return browser.executeScript('return {' +
                'height: document.body.scrollHeight,' +
                'width: document.body.scrollWidth' +
                '}'
            ).then(function(result) {
                return browser.driver.manage().window().setSize(/*result.width*/1280, result.height + 50).then(function() {
                    return browser.takeScreenshot().then(function(png) {
                        eachStepScreensArr.push(new Buffer(png.replace(/^data:image\/(png|gif|jpeg);base64,/, ''), 'base64'));
                    });
                });
            });

        }

        return Promise.resolve();
    });
};

如果您正在使用黄瓜HTML报告器,请确保它支持多个嵌入(例如“cucumber-html-report”),其他大多数只显示第一个嵌入。

如果您只拍摄失败步骤的屏幕截图,请更改行

stepResult.getStatus() !== 'skipped'

stepResult.getStatus() == 'failed'