在conf.js中的插件配置中使用Protractor参数值

时间:2016-12-23 13:44:39

标签: javascript node.js protractor report

我希望 protractor-screenshoter-plugin 创建带有spec name作为目录名的报告目录。在运行Protractor时,Spec name将作为参数传递:
量角器--specs my_spec.js conf.js

在调用上述命令后,我希望运行我的测试并在目录 my_spec.js (或my_spec)中创建报告。
插件的配置包含在 conf.js 中:

plugins: [{
    package: 'protractor-screenshoter-plugin',
    screenshotOnExpect: 'failure+success',
    screenshotOnSpec: 'failure',
    withLogs: false,
    htmlReport: true,
    screenshotPath: '',//I would like to put the --specs parameter value here
    writeReportFreq: 'end',
    clearFoldersBeforeTest: true
}]

任何想法怎么做?如何在conf.js中访问Protractor的'--specs'参数值?

1 个答案:

答案 0 :(得分:0)

您可以使用process.argv访问在触发Protractor时传递的所有CLI参数,这将为您提供包含所有参数的数组

请参阅process.argv

上的Nodejs文档中的以下摘录
  

process.argv属性返回包含命令行的数组   启动Node.js进程时传递的参数。首先   元素将是process.execPath。如果访问,请参阅process.argv0   需要argv [0]的原始值。第二个元素是   正在执行的JavaScript文件的路径。剩下的要素   将是任何其他命令行参数。

执行protractor conf.js --spec demo2.js

console.log(process.argv)中的语句conf.js将输出如下所示的内容

[ 'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\aditya\\AppData\\Roaming\\npm\\node_modules\\protractor\\bin\\protractor',
  'conf.js',
  '--specs',
  'demo2.js' ]

然后构建您的逻辑以提取您需要的值。在这种特定情况下,要获取specs值(没有扩展名,以便不发生文件名冲突),以下函数将有所帮助

function getSpecsFromCLIArg() {
    for (i = 0; i < process.argv.length; i++) {
        if (process.argv[i] === '--specs') {
            var specFile = process.argv[i + 1];
            return specFile.substr(0, specFile.indexOf('.'));
        }
    }
}
console.log(getSpecsFromCLIArg())

plugins: [{
    package: 'protractor-screenshoter-plugin',
    screenshotOnExpect: 'failure+success',
    screenshotOnSpec: 'failure',
    withLogs: false,
    htmlReport: true,
    screenshotPath: getSpecsFromCLIArg(),
    writeReportFreq: 'end',
    clearFoldersBeforeTest: true
}]