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

Je commence mes tests de rapporteurs 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 lancement' qui dépend d'un paramètre (dans ce cas, le 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 cours, j'obtiens un ReferenceError car la configuration n'est pas définie. Comment dois-je faire cela? Est-ce même possible?

Je ne suis pas tout à fait sûr si les globules de rapporteurs sont réglés au beforeLaunch() , mais ils sont définitivement disponibles à l'étape onPrepare() .

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

 console.log(browser.params.baseUrl); 

Mise à jour: à l'aide de Jasmine 2.6+, protractor 4.x, browser.params était vide, mais les suivants ont travaillé sur onPrepare() step:

 console.log(browser.baseUrl); 

Dans le cas où vous avez besoin de chaque élément dans 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 } 

Voici un exemple de code pour itérer à travers les lignes de commande cmd dans votre fichier de configuration Protractor et définir des spécifications (et d'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 }); })();