2015-04-02 5 views
20

mi metto le mie prove goniometro eseguendo il seguente:Posso accedere ai parametri nel mio file di configurazione del goniometro?

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

Vorrei eseguire una funzione di 'prima del lancio', che è dipendente di un parametro (in questo caso, il baseurl). È possibile?

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

    } 
}; 

Se corro che ottengo un ReferenceError perché config non è definito. Come dovrei farlo? È possibile?

risposta

20

Non sono completamente sicuro se le misure globali siano impostate sul gradino beforeLaunch(), ma sono sicuramente disponibili al punto onPrepare().

accedere all'oggetto params attraverso il browser oggetto globale:

console.log(browser.params.baseUrl); 

Aggiornamento: Utilizzando Jasmine 2.6+, goniometro 4.x, browser.params era vuoto, ma le seguenti ha lavorato in onPrepare() passo:

console.log(browser.baseUrl); 
+0

Per quanto ne so, non sono disponibili nella fase beforeLaunch(), ma per me è sufficiente per averli nella fase onPrepare(). Grazie per la risposta – Julio

+0

Ciò significa che non possiamo impostare le "specifiche" in base ai parametri trasmessi in questo modo? Ho detto 'specs: [browser.params.test_set + '/ *. Feature']', ma ho ottenuto "browser non definito", immagino sia perché è troppo presto a quel punto? – GreenAsJade

+0

@GreenAsJade sì, l'oggetto 'browser' globale non è disponibile in quel punto. Prendi in considerazione una domanda a parte: per gli altri utenti che hanno riscontrato lo stesso problema, sarebbe utile in futuro. – alecxe

3

Nel caso in cui sia necessario ogni singolo elemento nell'intero file di configurazione, è possibile utilizzare browser.getProcessedConfig() per farlo.

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

browser.getProcessedConfig() può solo recuperare la configurazione, non è possibile trasformare un ulteriore oggetto di configurazione per la modifica dinamica della variabile di configurazione su un server bulid (ad esempio impostando il buildnumber) – Marko

3

Ecco un codice di esempio per iterare attraverso argomenti della riga di cmd nel file di goniometro config e impostare specifiche (e alcuni altri valori di configurazione run) direttamente dalla linea di comando:

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