如何使用量角器conf传递命令行参数

时间:2018-10-15 18:38:04

标签: node.js protractor cucumberjs

我们有量角器-黄瓜框架作为e2e测试。到现在为止,我们使用conf文件并静态提及conf json中的环境详细信息。我想通过protractor_conf文件传递用户定义的参数,如下所示。

destinations

,并希望在conf.js中获取此参数,并在功能部分下替换。我无法从网上获得适当的详细信息,因此将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以在 conf.js 文件中添加参数,然后从命令行传递 arugs

这里是一个例子。

   // The params object will be passed directly to the Protractor instance,
   // and can be accessed from your test as browser.params. It is an arbitrary
   // object and can contain anything you may need in your test.
   // This can be changed via the command line as:
   //   --params.environment.Browser "Firefox"

params: {
  environment: {
   browser: 'Chrome',
   execPlatform: 'sauce',
   password: 'default'
  }
}

现在我们可以从命令行传递arugs

protractor conf.js --parameters.environment.browser= Firefox --parameters.environment.execPlatform=sauce --parameters.environment.password=password123

接下来,您还可以在规范文件中引用这些参数。

describe('describe some test', function() {
  it('describe some step', function() {
    $('.password').sendKeys(browser.params.login.password);
   });
});

设置参数有很多优点。

  • 如果我们知道我们将在多个规格文件(即登录电子邮件和密码)中使用相同的值,则参数对于消除不必要的重复非常有用。
  • 能够在运行时更改参数值,使使用不同数据运行相同的测试变得更加容易。
  • 提高安全性–在规范文件中对密码进行硬编码不是一个好方法。参数使您能够保留它们,而在运行时提供它们。

答案 1 :(得分:0)

您可以使用process api来解析cmd行中的参数。

// protractor conf.js

var readParamsFromCli = function() {

    var paramsPair = process.argv.slice(3).filter(function(it){
        return it.startsWith('-D');
    });

    var params = {};

    paramsPair.forEach(function(pair){
        var parts = pair.split('=');
        var name = parts[0].trim().replace('-D', '');
        var value = parts[1] && parts[1].trim() || true;
        params[name] = value;
    });


    return params;
};

var params = readParamsFromCli();

var capbilities = {
    browserName: params.browserName || 'chrome',
    platform: params.execPlatform
};

exports.config = {
    ...
    capbilities: capbilities

};

然后您可以按以下方式运行case:

protractor protractor_conf.js -DbrowserName=chrome -DexecPlatform=native

答案 2 :(得分:0)

您可以将配置分成多个配置文件。例如 protractor-chrome.conf.js

const baseConf = require('./protractor.conf').config;

exports.config = Object.assign({
  capabilities: {
    browserName: 'chrome'
  }
}, baseConf);

答案 3 :(得分:0)

这将类似于第二个示例,但直接使用配置文件。

const args = require('minimist')(process.argv.slice(2));
exports.config = {
  //your config stuff
  baseUrl: args.Url ? args.URL : <your default>,
  capabilities: {
   'browserName': 'chrome',
   chromeOptions: {
     args: [args.Options]
    },
   }
}

然后在您的package.json脚本中像这样:

"e2e": "protractor protractor.conf.js --Url=http://test.com" --Options=--headless