web-dev-qa-db-fra.com

Puis-je accéder aux paramètres de mon fichier de configuration de rapporteur?

Je démarre mes tests de rapporteur en exécutant ce qui suit:

protractor protractor.conf.js --params.baseUrl=http://www.google.com --suite all

Je voudrais exécuter une fonction "avant le lancement" qui dépend d'un paramètre (dans ce cas, la baseUrl). Est-ce possible?

exports.config = {
    seleniumServerJar: './node_modules/protractor/Selenium/selenium-server-standalone-2.45.0.jar',
    seleniumPort: 4455,
    suites: {
        all: 'test/*/*.js',
    },
    capabilities: {
        'browserName': 'firefox'
    },
    beforeLaunch: function() {
        console.log('I want to access my baseUrl parameter here: ' + config.params.baseUrl);
    },
    onPrepare: function() {

        require('jasmine-reporters');
        jasmine.getEnv().addReporter(
            new jasmine.JUnitXmlReporter('output/xmloutput', true, true));

    }
};

Si je lance cela, j'obtiens une ReferenceError car la configuration n'est pas définie. Comment dois-je faire ça? Est-ce que c'est possible?

25
Julio

Je ne suis pas complètement sûr si les globales du rapporteur sont définies à l'étape beforeLaunch(), mais elles sont définitivement disponibles à l'étape onPrepare().

Accédez à l'objet params via l'objet global browser:

console.log(browser.params.baseUrl);

Mise à jour: En utilisant Jasmine 2.6+, le rapporteur 4.x, browser.params était vide, mais les éléments suivants ont fonctionné à l'étape onPrepare():

console.log(browser.baseUrl);
22
alecxe

Si vous avez besoin de chaque élément de l'ensemble du fichier de configuration, vous pouvez utiliser browser.getProcessedConfig() pour ce faire.

onPrepare: () => {
    browser.getProcessedConfig().then(console.log); // even `params` is in here
}
7
Droogans

Voici un exemple de code pour parcourir les arguments de ligne cmd dans votre fichier de configuration Protractor et définir les spécifications (et certaines autres valeurs de configuration d'exécution) directement à partir de la ligne de commande:

config.js

// usage: protractor config.js --params.specs="*" --params.browser=ie --params.threads=1
//        protractor config.js --params.specs="dir1|dir2"
//        protractor config.js --params.specs="dir1|dir2/spec1.js|dir2/spec2.js"

// process command line arguments and initialize run configuration file
var init = function(config) {
  const path = require('path');
  var specs;
  for (var i = 3; i < process.argv.length; i++) {
    var match = process.argv[i].match(/^--params\.([^=]+)=(.*)$/);
    if (match)
      switch (match[1]) {
        case 'specs':
          specs = match[2];
          break;
        case 'browser':
          config.capabilities.browserName = match[2];
          if (match[2].toLowerCase() === 'ie') {
            config.capabilities.browserName = 'internet Explorer';
            config.capabilities.platform = 'ANY';
            config.capabilities.version = '11';
            config.seleniumArgs = ['-Dwebdriver.ie.driver=' + path.join('node_modules', 'protractor' ,'Selenium' ,'IEDriverServer.exe')];
          }
          if (match[2] !== 'chrome' && match[2] !== 'firefox')
            config.directConnect = false;
          break;
        case 'timeout':
          config.jasmineNodeOpts.defaultTimeoutInterval = parseInt(match[2]);
          break;
        case 'threads':
          config.capabilities.maxInstances = parseInt(match[2]);
          config.capabilities.shardTestFiles = config.capabilities.maxInstances > 1;
          break;
      }
  }

  // generate specs array
  specs.split(/\|/g).forEach(function(dir) {
    if (dir.endsWith('.js'))
      config.specs.Push(dir);
    else
      config.specs.Push(path.join(dir, '*.js'));
  });

  return config;
};

exports.config = (function() {
  return init({
    specs: [],
    framework: 'jasmine',
    jasmineNodeOpts: {
      defaultTimeoutInterval: 300000 // 5 min
    },
    capabilities: {
      browserName: 'chrome',
      shardTestFiles: false,
      maxInstances: 1
    },
    directConnect: true
  });
})();
6
exbuddha