Как запустить multiCapabilities на чтение параметров конфигурации из файла конфигурации - PullRequest
0 голосов
/ 17 января 2019

У меня есть один файл конфигурации, который запускает тесты в одном браузере, используя возможности. Теперь я создал еще один отдельный файл конфигурации, который содержит multiCapabilites и будет запускать одни и те же тесты в нескольких браузерах.

Я хочу оптимизировать конфиги, поэтому во втором конфигурационном файле я пишу multiCapabilities для первого конфига и использовал

delete firstConfig ['abilities '];

чтобы игнорировать возможности из первого конфига и использовать все другие параметры из firstConfig и использовать multiCapabilities из второго конфига и запустить.

Ожидаемый результат: параметры в конфигах не должны дублироваться в обоих конфигах, только изменение multiCapabilities, остальная часть config одинакова.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Подготовьте поставщика возможностей для определения различных возможностей и экспортируйте функцию для возврата массива возможностей в соответствии с параметрами строки 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

0 голосов
/ 17 января 2019

Используйте базовый файл конфигурации

Возможно, лучше использовать базовый файл конфигурации и другой файл, который выходит из него.В этом примере мы рассмотрим мой файл базовой конфигурации :

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 не сработала.

...