如何运行 multiCapabilities从配置文件中读取配置参数

How to run multiCapabilities reading configuration parameters from the configuration file

我有一个配置文件,运行s 在一个浏览器中使用功能进行测试。 现在我又创建了一个单独的配置文件,其中包含 multiCapabilites 并将 运行 在多个浏览器中进行相同的测试。

我想优化配置所以我第二个配置文件我为第一个配置编写 multiCapabilities 并使用

删除第一个配置['capabilities'];

忽略第一个配置中的功能并使用第一个配置中的所有其他参数并使用第二个配置中的 multiCapabilities 和 运行。

预期结果: 配置中的参数不应在两个配置中重复,只有 multiCapabilities 是变化的,其余配置相同。

使用基本配置文件

拥有一个基本配置文件和另一个从它扩展的文件可能是更好的方法。对于此示例,我们将查看我的 base configuration file:

var env = require('./environment');

// This is the configuration for a smoke test for an Angular TypeScript application.
exports.config = {
  seleniumAddress: env.seleniumAddress,

  framework: 'jasmine',

  specs: [
    'ng2/async_spec.js'
  ],

  capabilities: env.capabilities,

  baseUrl: env.baseUrl,
  allScriptsTimeout: 120000,
  getPageTimeout: 120000,
  jasmineNodeOpts: {
    defaultTimeoutInterval: 120000
  }
};

从基本配置创建第二个配置

从那里,我们做了类似于您的问题的事情,我们删除了功能并添加了多重功能。 (https://github.com/angular/protractor/blob/master/spec/ciNg2Conf.js)。此外,由于我们在 Sauce Labs 运行,我们还决定增加超时时间。

exports.config = require('./angular2Conf.js').config;

exports.config.sauceUser = process.env.SAUCE_USERNAME;
exports.config.sauceKey = process.env.SAUCE_ACCESS_KEY;
exports.config.seleniumAddress = undefined;

// TODO: add in firefox when issue #2784 is fixed
exports.config.multiCapabilities = [{
    'browserName': 'chrome',
    'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER,
    'build': process.env.TRAVIS_BUILD_NUMBER,
    'name': 'Protractor suite tests',
    'version': '54',
    'selenium-version': '2.53.1',
    'chromedriver-version': '2.26',
    'platform': 'OS X 10.11'
  }];
exports.config.capabilities = undefined;
exports.config.allScriptsTimeout = 120000;
exports.config.getPageTimeout = 120000;
exports.config.jasmineNodeOpts.defaultTimeoutInterval = 120000;

希望对您有所帮助。

更新:

根据下面的评论,将 config.capabilities 设置为未定义无效;但是,将 config.capabilities 设置为 false 确实有效。

准备一个能力提供者来定义不同的能力,并根据命令行参数将一个函数导出到return一个能力数组。

// capabilities.provider.js

var capabilities = {
  chrome: {
    browserName: 'chrome'
  },
  chrome-headless {
    browserName: 'chrome',
  },
  firefox: {
    browsername: 'firefox'
  },
  ...
 };

exports.evaluate=function(){

  var caps = 'chrome';

  process.argv.slice(3).forEach(function(kvp){
    if(kvp.includes('--caps=')) {
      caps = kvp.split('=')[1] || caps;
    }
  })

  var _caps = [];

  caps.split(',').forEach(function(cap){
     if(Object.keys(capabilities).includes(cap)) {
        _caps.push(capabilities[cap])
     }
  })

  return _caps;
};

量角器config.js

var capsProvider = require('./capabilities.provider');

exports.config = {
  seleniumAddress: '',

  framework: 'jasmine',

  specs: [
    'ng2/async_spec.js'
  ],

  params: {

  },

  multiCapabilities: capsProvider.evaluate(),

  baseUrl: env.baseUrl,
  allScriptsTimeout: 120000,
  getPageTimeout: 120000,
  jasmineNodeOpts: {
    defaultTimeoutInterval: 120000
  }
};

从命令行指定大写字母:

protractor config.js --caps=chrome,firefox,ie,safari