2014-11-15 2 views
14

Мне нужно запустить тесты моего транспортира в разных контекстах с различными baseUrl s в конфигурационных файлах. Я не хочу использовать отдельные файлы конфигурации для каждой ситуации, так как это сложнее поддерживать. Скорее, я хочу передать базовый url в качестве параметра командной строки. Вот то, что я пытался до сих пор:Как параметризовать свойство baseUrl файла конфигурации транспортира

The protractor.conf.js:

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

А для вызова транспортир:

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

Это не работает, так как это, кажется, как, например browser уже настроен до того, как вызывается onPrepare.

Кроме того, я попытался это:

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

Но это не работает, либо, так как это, кажется, как, например браузер не доступна, когда конфигурация генерируется.

Похоже, что я могу использовать стандартный узел process.argv для доступа ко всем аргументам командной строки, но это, похоже, противоречит духу транспортира.

Каков наилучший способ для меня делать то, что мне нужно?

ответ

22

Кажется, что это уже возможно, но документация пятнистая в этой области. Looking at the code, однако, protractor поддерживает несколько, казалось бы, недокументированных аргументов командной строки.

Таким образом, работает что-то, как это будет работать:

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

Спасибо за обмен. Вы должны сделать запрос на перенос, чтобы добавить их в документы, если вы считаете это релевантным. – glepretre

+0

Да, я это рассмотрю. –

+0

Для кого-либо еще, если вам нужно получить доступ к нему в блоке 'onPrepare', как запросил OP, можете сделать это через следующий код https://github.com/angular/protractor/blob/1.7.0/docs/referenceConf. js # L195-L208 и используйте config.baseUrl. – cerd

1

Другой вариант заключается в использовании gruntfile.js и он вызвать файл транспортир конфигурации.

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

файл конфигурации Транспортир: 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()); 
     } 
    } 
}; 

// Чтобы работать с URL по умолчанию http://localhost:6034

grunt protractor 

// Для того, чтобы запустить с любым другим адресом

grunt protractor --baseUrl:"http://dev.abc.com/" 
Смежные вопросы