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 }); })();