如何获取--suite参数?

How to get --suite Parameter?

我想获取 --suite 参数。例如:

protractor conf.js --suite=foo

我想在我的测试用例中得到 'foo'。例如:

it ('Sent parameter', function() {
    consol.log('Suite is:' + ...);
}

您可以使用

browser.getProcessedConfig().then(function(config){ 
       console.log(config.suite)
});

请参阅 http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.getProcessedConfig 了解更多信息。

您可以使用 Nodejs 的 process 模块通过 process.argv 获取所有命令参数。

我有一个 cli.params.js 来处理命令参数和 return 一个对象。

// cli.params.js
/**
 * get parameters value from command line,
 */
var default_processor = function(value) {
    return value ? value.trim() : value;
};

exports.process = function(options) {
    var params = options && options.default || {};
    var processor = options && options.processor || {};

    process.argv.slice(3).forEach(function(arg) {
        var flag = arg.split('=')[0];
        var value = arg.split('=')[1];
        var name = flag.replace('--', '');

        if (processor[name]) {
            processor[name](value, params);
        } else {
            params[name] = default_processor(value);
        }
    });

    return params;
};

如何使用cli.params.js

// protractor conf.js
var params = require('./cli.params.js').process();
console.log('suite: '+ params.suite) // smoke
console.log('env: '+ params.env) // dev
console.log('abc: '+ params.abc) // 123

// if you want to access params across scripts, you can make it as global
global.params = params

exports.config = {

    capabilities: {},

    seleniumAddress: '',

    framework: 'custom',
    ...
};

// spec.js
it ('Sent parameter', function() {
    console.log('Suite is:' + global.params.suite);
});

Pass-in cmd 行中的参数:
protractor conf.js --suite=smoke --env=dev --abc=123

将选项传递到 cli.params.js process() 的示例:

var options= {
    // set default/omit value
    default: {
        device: 'desktop',
        browser: 'chrome'
    },
    // set customize processor for certain argument, rather than the default processor
    // defined in cli.params.js
    processor: {
        'cucumberOpts.tags': function(value, params) {
            params.tags = value;
        }
    }
};

// 命令行
protractor conf.js --suite=smoke --cucumberOpts.tags=@smoke

var params = require('./cli.params.js').process(options);
console.log('suite: '+ params.suite) // smoke
console.log('device: '+ params.device) // desktop, even not specify in cmd line
console.log('browser: '+ params.browser) // chrome, even not specify in cmd line
console.log('tags : '+ params.tags ) // @smoke, 
// with the customize processor in options, 
// we can use params.tags, rather than use params['cucumberOpts.tags'] to get tags values