Как передать параметры из Gruntfile.js в спецификацию webdriverio?

Я хотел бы параметризовать свои спецификации webdriverio из файла Gruntfile.js. Цель состоит в том, чтобы указать хост, порт, имя пользователя, пароль и, возможно, другие параметры в Grunt и прочитать их из файла спецификации.

Чтение примера Source Labs из https://www.npmjs.com/package/grunt-webdriver#overview Я задал хост и порт в настройках. Но при настройке порта я получил следующую ошибку:

/Users/sandro/Developing/Projekte/sling/svn/contrib/explorers/resourceeditor/frontend/node_modules/grunt-webdriver/node_modules/webdriverio/lib/utils/PromiseHandler.js:154
             throw error;
                   RuntimeError: RuntimeError

Вот почему я думаю, что должен быть другой способ сделать это. Мой Gruntfile.js выглядит так:

module.exports = function(grunt) {

var e2eTestSpecFolder = '../src/test/javascript/e2e/spec/**/*spec.js';

grunt.initConfig({
...
    webdriver: {
        options: {
            host: 'localhost',
            port: 8080
        },
        chrome: {
            tests: [e2eTestSpecFolder],
            options: {
                // overwrite default settings 
                desiredCapabilities: {
                    browserName: 'chrome'
                }
            }
        },
        firefox: {
            tests: [e2eTestSpecFolder],
            options: {
                // overwrite default settings 
                desiredCapabilities: {
                    browserName: 'firefox'
                }
            }
        }
    }
})

...
grunt.registerTask('desktop_build', ['webdriver:chrome', 'webdriver:firefox']);
};

Заранее спасибо за любые подсказки!

Обновление: я использую следующие версии:

  • ворчание-кли: v0.1.13

  • ворчание: v0.4.5

  • веб-драйвер-менеджер: 3.0.0

  • ворчание-вебдрайвер: 0.4.8


person Sandro    schedule 31.03.2015    source источник
comment
Привет. Что такое версии yr grunt и w.io? Чего вы пытаетесь достичь? Подключить webdriver.io к внешнему хабу/через прокси?   -  person Stan E    schedule 05.04.2015
comment
Тест должен открыть веб-сайт с использованием хоста и порта, а также войти на этот веб-сайт, используя имя пользователя и пароль. Там тест создает данные, удаляет данные и так далее. Но хост, порт, имя пользователя и пароль должны быть настраиваемыми. Я хотел бы предоставить первоначальную конфигурацию для этих значений в файле grunt.js и сделать их переопределяемыми из командной строки. Но вопрос в том, как передать эти переменные из файла grunt в спецификацию webdriver.io. Версии: grunt-cli: v0.1.13 grunt: v0.4.5 webdriver-manager: 3.0.0 grunt-webdriver: 0.4.8   -  person Sandro    schedule 06.04.2015


Ответы (1)


Хорошо, я понял вашу проблему :)

Эти параметры «хост» и «порт» являются предопределенными и используются для другой цели (это хост и порт, где будут выполняться тесты, и вы переопределяете порт - поэтому они терпят неудачу, например здесь - https://github.com/webdriverio/webdriverio/blob/master/examples/webdriverio.saucelabs.js вы можете видеть, что они используют для подключения к соусам). Для этих целей самое простое решение - определить переменные ENV и сделать для них некоторые значения по умолчанию (но вы не должны делать это внутри gruntfile на самом деле, это не обязательно). Вы можете определить это в файле, где вы размещаете эти переменные для первый раз вроде:

testHost: (typeof(process.env.TEST_HOST) === 'undefined') ? 'http://localhost' : process.env.TEST_HOST;

И после этого вы просто предоставляете TEST_HOST, если это необходимо в качестве переменной env:

    Linux: sh~ TEST_HOST=http://google.com
grunt task
    Win: export TEST_HOST=http://google.com
grunt task

Если вы не зададите переменную, то по умолчанию будет использоваться "http://localhost".

person Stan E    schedule 06.04.2015
comment
Хорошо, тогда я предоставляю «testHost» для Gruntfile.js. Вопрос в том, как мне получить доступ к этому в спецификации webdriverio? - person Sandro; 01.05.2015
comment
@Sandro либо с помощью process.env.TEST_HOST, либо с помощью grunt.config.get() - person Stan E; 01.05.2015
comment
Я бы предпочел использовать gruntjs.com/api/grunt.option для testHost, а не переменная ENV, если это возможно. Кажется, это способ определить параметр в Grunt. Но, конечно, если это невозможно, я должен использовать переменную ENV. - person Sandro; 04.05.2015
comment
Я попытался зарегистрировать переменную testHost в файле спецификаций с помощью console.log("process.env.testHost: "+process.env.testHost); Но это, похоже, не зарегистрировало переменную вызывающей конфигурации grunt. - person Sandro; 04.05.2015
comment
как вы его запускаете? каков результат env | grep testHost ? - person Stan E; 04.05.2015
comment
Я запускаю файл спецификации с grunt-webdriver, см. npmjs.com/package/grunt-webdriver - person Sandro; 09.05.2015
comment
Теперь это работает, установив переменную env в gruntfile с пакетом grunt-env npm (npmjs.com/package /grunt-env) и прочитав process.env.ENV_VARIABLE в файле спецификаций. Но хотелось бы еще решения с gruntjs.com/api/grunt.option, если оно есть. - person Sandro; 09.05.2015