por - llamar archivo javascript desde html
¿Puedo acceder a los parámetros en mi archivo de configuración del transportador? (3)
Comienzo mis pruebas de transportadores ejecutando lo siguiente:
protractor protractor.conf.js --params.baseUrl=http://www.google.com --suite all
Me gustaría ejecutar una función ''antes del lanzamiento'' que depende de un parámetro (en este caso, la baseUrl). ¿Es eso posible?
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 ejecuto eso obtengo un ReferenceError porque la configuración no está definida. ¿Cómo debo hacer eso? ¿Es eso posible?
Aquí hay un código de ejemplo para iterar a través de la línea cmd args en su archivo de configuración de Protractor y establecer especificaciones (y algunos otros valores de configuración de ejecución) directamente desde la línea de comandos:
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
});
})();
En caso de que necesite cada elemento en el archivo de configuración completo, puede usar browser.getProcessedConfig()
para hacer esto.
onPrepare: () => {
browser.getProcessedConfig().then(console.log); // even `params` is in here
}
No estoy completamente seguro de si los beforeLaunch()
globales del transportador están configurados en la etapa beforeLaunch()
, pero definitivamente están disponibles en el paso onPrepare()
.
Acceda al objeto params
través del objeto del browser
global:
console.log(browser.params.baseUrl);
Actualización: al usar Jasmine 2.6+, protractor 4.x, browser.params estaba vacío, pero lo siguiente funcionó en el paso onPrepare()
:
console.log(browser.baseUrl);