首页 > 解决方案 > 如何获取规范名称以用作量角器-html-reporter-2 中的输出文件名?

问题描述

我正在使用量角器 html 记者 2 进行报告。我需要将规范名称作为 html 报告输出文件名。

我在我的配置文件中使用下面的代码。

var today = new Date(),
timeStamp = today.getMonth() + 1 + '-' + today.getDate() + '-' + today.getFullYear();
onPrepare:
 function () 
{
    browser.driver.manage().window().maximize();
    var fs = require('fs-extra');        

    scriptName=function(){
        return browser.getProcessedConfig().then(function(config){
        return config.specs;
        });
    };

    fs.emptyDir('./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots/', function (err) {
        console.log(err);
    });
    jasmine.getEnv().addReporter({
        specDone: function(result) {
            //if (result.status == 'failed' || result.status == 'passed') {
            if (1==1) {
                browser.getCapabilities().then(function (caps) {
                    var browserName = userData.testUser.browser.toUpperCase();

                    browser.takeScreenshot().then(function (png) {
                        var stream = fs.createWriteStream('./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots/'+ result.fullName+'.png');
                        stream.write(new Buffer(png, 'base64'));
                        stream.end();
                    });
                });
            }
        }
    });



    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
        consolidateAll: true,
        savePath: 'target/XMLReports',
        filePrefix: 'xmlresults'
    }));

},

onComplete: function() {
    var browserName, browserVersion;
    var capsPromise = browser.getCapabilities();

    capsPromise.then(function (caps) {
        browserName = userData.testUser.browser.toUpperCase();
        platform=caps.get('platform');
        browserVersion = caps.get('version');


        testConfig = {
            reportTitle: 'Test Execution Report',
            outputPath: './target/htmlReports/'+scriptName+'-'+timeStamp,
            screenshotPath: './target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots',
            testBrowser: browserName,
            browserVersion: browserVersion,
            outputFilename:'ProtractorTestReport',
            testPlatform: platform,
            //browserVersion: browserVersion,
            modifiedSuiteName: true,
            screenshotsOnlyOnFailure: false
        };
        new HTMLReport().from('./target/XMLReports/xmlresults.xml', testConfig);
    });
},

plugins: [{
    package: 'jasmine2-protractor-utils',
    disableHTMLReport: true,
    disableScreenshot: false,
    screenshotPath:'./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots',
    screenshotOnExpectFailure:true,
    screenshotOnSpecFailure:true,
    clearFoldersBeforeTest: true,
    htmlReportDir: './target/htmlReports'

}],

我试过了 browser.getProcessedConfig().then(function(config){ console.log(config.specs); }); ,它返回

['D:\projects\HeartlandSSP\Automation\TenantManagement\Ssp.TenantManagement.Protractor_Test\specs\createTenantSpec.js','C:\Users\renusri.rajalingam\AppData\Roaming\npm\node_modules\protractor\built\frameworks\ __protractor_internal_afterEach_setup_spec.js' ]

但实际的规范名称createTenantSpec.js 没有返回。我只需要规范的文件名,而不需要描述的名称或它的功能。由于我有 5 个规格,我需要使用其规格名称生成单独的报告。谁能帮我解决这个问题?

标签: jasmineprotractor

解决方案


的值config.specs是一个数组,根据输出我们有文件的绝对路径在 index 0。所以文件名可以提取如下。

browser.getProcessedConfig().then(function (config) {
  var fullName = config.specs[0];
  var fileName = fullName.substring(fullName.lastIndexOf('/')+1);
  console.log('fileName:', fileName);
});

// output: 
// fileName: createTenantSpec.js

或者,如果您想在此数组中包含所有文件名,您可以使用:

browser.getProcessedConfig().then(function (config) {
  var fileNames = config.specs.map(function(path) { 
    return path.substring(path.lastIndexOf('/')+1); 
  });
  fileNames.forEach(function(fileName) {
    console.log('fileName:', fileName);
  });
});

// output:
// fileName: createTenantSpec.js
// __protractor_internal_afterEach_setup_spec.js

参考:

array.prototype.map()=>点击我

array.prototype.forEach()=>点击我


推荐阅读