Protractor cucumber html report is generating only after 2nd run?

问题: When i try to run my code it is generating html report only after 2nd run. In the first run it is generating the json file and then after the second run, by using the gener...

问题:

When i try to run my code it is generating html report only after 2nd run. In the first run it is generating the json file and then after the second run, by using the generated json file and creating the HTML report

Please tell me how to generate html report by running only once.

below is code i tried

hook.js

const {defineSupportCode} = require('cucumber');

defineSupportCode(function ({After}) {

   After(function(scenario,done)
{
const world = this;
console.log('in after block')
if (scenario.result.status === 'failed') {
console.log('in after block inside')

    browser.takeScreenshot().then(function (stream) {
        let decodedImage = new Buffer(stream.replace(/^data:image/(png|gif|jpeg);base64,/, ''), 'base64');
        world.attach(decodedImage, 'image/png');
        console.log('screenshot successful');
    }).then(function () {
        done();
    });
}else {
    done();
}
});


       });

index.js

var reporter = require('cucumber-html-reporter');

var options = {
        theme: 'bootstrap',

    output: 'cucumber-report.html',
    reportSuiteAsScenarios: true,
    launchReport: true,
    screenshotsDirectory: 'screenshots123',
    takeScreenShotsOnlyForFailedSpecs: true,
     //screenshotsSubfolder: 'images',
    storeScreenshots: true,

};

reporter.generate(options);

Index.js

var reporter = require('cucumber-html-reporter');

var options = {
    theme: 'bootstrap',
    jsonFile: 'C:/Users/pc/ProtractorCucumber/htmlReport/cucumber_html_reporter/report.json',
  //  jsonFile: 'C:/Users/pc/ProtractorCucumber/htmlReport/cucumber_html_reporter/cucumber-report.json',
    output: 'C:/Users/pc/ProtractorCucumber/htmlReport/cucumber_html_reporter/cucumber-report.html',
   // output: 'report123.html',
    reportSuiteAsScenarios: true,
    launchReport: true,
    screenshotsDirectory: 'screenshots123',
    takeScreenShotsOnlyForFailedSpecs: true,
     //screenshotsSubfolder: 'images',
    storeScreenshots: true,

};

reporter.generate(options);

回答1:

Cucumber-html-reporter will require the JSON file created by cucumber after the execution.

Please refer the following snippet which has exception handled before calling generate function of cucumber-html-report.

const Cucumber = require('cucumber');
import { browser } from 'protractor';
import * as fs from 'fs';
import { config } from '../config/config';
import { defineSupportCode } from "cucumber";
import * as reporter from 'cucumber-html-reporter';
import { mkdirp } from 'mkdirp';

defineSupportCode(function ({ registerHandler, registerListener, After, setDefaultTimeout }) {
    setDefaultTimeout(10 * 1000);
    let jsonReports = process.cwd() + "/reports/json";
    let htmlReports = process.cwd() + "/reports/html";
    let targetJson = jsonReports + "/cucumber_report.json";


//BeforeFeature
    registerHandler('BeforeFeature', function (event, callback) {
        browser.get(config.baseUrl);
        callback();
    });

    After(function (scenario) {
        let world = this;
        if (scenario.isFailed()) {
            return browser.takeScreenshot().then(function (screenShot) {
                // screenShot is a base-64 encoded PNG
                world.attach(screenShot, 'image/png');

            });

        }

    })

    let cucumberReporterOptions = {

        theme: "bootstrap",
        //theme: "foundation",
      //  theme: "simple",
        jsonFile: targetJson,
        output: htmlReports + "/cucumber_reporter.html",
        reportSuiteAsScenarios: true,
        launchReport: false

    };

    let logFn = string => {
        if (!fs.existsSync(jsonReports)) {
            mkdirp.sync(jsonReports);
        }
        try {
            fs.writeFileSync(targetJson, string);
            reporter.generate(cucumberReporterOptions); // invoke cucumber-html-reporter
        } catch (err) {
            if (err) {
                console.log(`Failed to save cucumber test results to json file. 
                             Failed to create html report.
                             `);
                console.log(err);
            }
        }
    };
    let jsonformatter = new Cucumber.JsonFormatter({
        log: logFn
    });
    registerListener(jsonformatter);
})
  • 发表于 2019-01-07 04:08
  • 阅读 ( 308 )
  • 分类:网络文章

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除