2014-11-15 15 views
14

Muszę uruchomić testy kątomierza w różnych kontekstach z różnymi baseUrl s w plikach konfiguracyjnych. Nie chcę używać oddzielnych plików konfiguracyjnych dla każdej sytuacji, ponieważ jest to trudniejsze do utrzymania. Zamiast tego chcę przekazać adres bazowy jako parametr wiersza poleceń. Oto, co starałem dotąd:Jak sparametryzować właściwość baseUrl pliku konfiguracyjnego kątomierza

The protractor.conf.js:

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

i powołać się kątomierz:

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

To nie działa, ponieważ wydaje się, że przykład browser jest już skonfigurowany przed wywołaniem onPrepare.

Podobnie Próbowałem to:

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

Ale to nie działa albo ponieważ wydaje się, że przykład przeglądarki nie jest dostępna, gdy config jest generowany.

Wygląda na to, że mogę użyć standardowego węzła process.argv, aby uzyskać dostęp do wszystkich argumentów wiersza poleceń, ale wydaje się, że jest to niezgodne z duchem kątomierza.

Jaki jest najlepszy sposób, aby zrobić to, co muszę zrobić?

Odpowiedz

22

Wygląda na to, że jest to już możliwe, ale dokumentacja jest w tym obszarze nieregularna. Looking at the code, jednak kątomierz obsługuje wiele pozornie nieudokumentowanych argumentów wiersza poleceń.

Tak, działa coś jak to będzie działać:

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

Dzięki za udostępnienie. Powinieneś przesłać prośbę o dodanie do dokumentów, jeśli uznasz to za stosowne. – glepretre

+0

Tak, rozważę to. –

+0

Dla każdego, kto potrzebuje dostępu do niego w bloku 'onPrepare', o jaki prosił OP, może to zrobić za pomocą następującego kodu: https://github.com/angular/protractor/blob/1.7.0/docs/referenceConf. js # L195-L208 i użyj config.baseUrl. – cerd

1

Inną opcją jest użycie gruntfile.js i mieć go nazwać plik konfiguracyjny kątomierz.

//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']); 
}; 

plik konfiguracyjny Kątomierz: 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()); 
     } 
    } 
}; 

// Aby uruchomić z domyślnego url http://localhost:6034

grunt protractor 

// Aby uruchomić z dowolnym innym adresem URL:

grunt protractor --baseUrl:"http://dev.abc.com/" 
Powiązane problemy