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

时间:2019-01-17 08:47:25

标签: javascript typescript jasmine protractor mocha

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

我想优化配置,因此我在第二个配置文件中为第一个配置编写了multiCapabilities并使用了

删除firstConfig ['capabilities'];

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

预期结果: 配置中的参数不能在两个配置中都重复,只有multiCapabilities是更改,其余配置相同。

2 个答案:

答案 0 :(得分:0)

使用基本配置文件

拥有一个基本配置文件和一个从其扩展的文件可能是一个更好的方法。对于此示例,我们将查看我的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设置为undefined无效;但是,将config.capabilities设置为false确实可以。

答案 1 :(得分:0)

准备功能提供者以定义各种功能,并根据cmd行参数导出功能以返回功能数组。

// 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
  }
};

在cmd行中指定大写字母:

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