2014-11-15 6 views
14

Ho bisogno di eseguire i miei test del goniometro in diversi contesti con diversi baseUrl s nei file di configurazione. Non voglio usare file di configurazione separati per ogni situazione poiché è più difficile da mantenere. Piuttosto, voglio passare l'url di base come parametro della riga di comando. Ecco quello che ho provato finora:Come parametrizzare la proprietà baseUrl del file di configurazione del goniometro

I protractor.conf.js:

exports.config = { 
    onPrepare : { 
    ... 
    exports.config.baseUrl = browser.params.baseUrl; 
    ... 
    } 
} 

e di invocare goniometro:

protractor protractor.conf.js --params.baseUrl 'http://some.server.com' 

Questo non funziona in quanto sembra che l'istanza browser è già configurato prima che venga chiamato onPrepare.

Allo stesso modo, ho provato questo:

exports.config = { 
    baseUrl : browser.params.baseUrl 
} 

ma questo non funziona nemmeno in quanto sembra che l'istanza del browser non è disponibile quando viene generato il config.

Sembra che sia possibile utilizzare il nodo standard process.argv per accedere a tutti gli argomenti della riga di comando, ma che sembra andare contro lo spirito del goniometro.

Qual è il modo migliore per fare ciò che devo fare?

risposta

22

Sembra che questo sia già possibile, ma la documentazione è discutibile in questo settore. Looking at the code, tuttavia, il goniometro supporta un numero di argomenti della riga di comando apparentemente non documentati.

Così, in esecuzione qualcosa come questo funziona:

protractor --baseUrl='http://some.server.com' my.conf.js 
+0

Grazie per la condivisione. Dovresti fare una richiesta di pull per aggiungerli ai documenti se lo trovi rilevante. – glepretre

+0

Sì, lo prenderò in considerazione. –

+0

Per chiunque altro se è necessario accedervi nel blocco 'onPrepare' come richiesto OP, può farlo tramite il seguente codice https://github.com/angular/protractor/blob/1.7.0/docs/referenceConf. js # L195-L208 e utilizzare config.baseUrl. – cerd

1

L'altra opzione è quella di utilizzare gruntfile.js e farlo chiamare il file di configurazione goniometro.

//gruntfile.js

module.exports = function (grunt) { 
    grunt.registerTask("default", "", function() { 
    }); 

    //Configure main project settings 
    grunt.initConfig({ 
     //Basic settings and infor about our plugins 
     pkg: grunt.file.readJSON('package.json'), 

     //Name of plugin 
     cssmin: { 
     }, 

     protractor: { 
      options: { 
       configFile: "conf.js", // Default config file 
       keepAlive: true, // If false, the grunt process stops when the test fails. 
       noColor: false, // If true, protractor will not use colors in its output. 
       args: { 
        baseUrl: grunt.option('baseUrl') || 'http://localhost:6034/' 
       } 
      }, 
      your_target: { // Grunt requires at least one target to run so you can simply put 'all: {}' here too. 
       options: { 
        configFile: "conf.js", // Target-specific config file 
        args: { 
         baseUrl: grunt.option('baseUrl') || 'http://localhost:63634/' 
        } 
       } 
      }, 
     }, 

     //uglify 
     uglify: { 
     } 
    }); 

    //Load the plugin 
    grunt.loadNpmTasks('grunt-contrib-cssmin'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-protractor-runner'); 

    //Do the Task 
    grunt.registerTask('default', ['cssmin']); 
}; 

il file di configurazione goniometro: conf.js

exports.config = { 
    directConnect: true, 

    // Capabilities to be passed to the webdriver instance. 
    capabilities: { 
     'browserName': 'chrome', 
     'chromeOptions': { 
      args: ['--no-sandbox'] 
     } 
    }, 

    chromeOnly: true, 

    // Framework to use. Jasmine is recommended. 
    framework: 'jasmine', 

    // Spec patterns are relative to the current working directory when 
    // protractor is called. 
    specs: ['specs/*/*_spec.js'], 

    suites : { 
     abcIdentity : 'specs/abcIdentity/*_spec.js' //picks up all the _spec.js files 
    }, 

    params: { 
     UserName: '[email protected]', 
     Password: '123' 
    }, 

    // Options to be passed to Jasmine. 
    jasmineNodeOpts: { 
     defaultTimeoutInterval: 30000, 
     includeStackTrace: true 
    }, 

    onPrepare: function() { 
     browser.driver.manage().window().maximize(); 
     if (process.env.TEAMCITY_VERSION) { 
      var jasmineReporters = require('jasmine-reporters'); 
      jasmine.getEnv().addReporter(new jasmineReporters.TeamCityReporter()); 
     } 
    } 
}; 

// a correre con URL predefinito http://localhost:6034

grunt protractor 

// Per eseguire con qualsiasi altro url

grunt protractor --baseUrl:"http://dev.abc.com/" 
Problemi correlati