Как я могу параметризовать свойство baseUrl файла конфигурации транспортира

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

Файл 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
}

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

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

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

Ответ 1

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

Итак, работа над чем-то вроде этого будет работать:

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

Ответ 2

Другой вариант - использовать 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']);
};

конфигурационный файл Protractor: 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

//Для запуска с любым другим URL

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