Управлять тестами с помощью одной задачи Gulp

Я пытаюсь получить тестирование e2e в моем проекте angular с помощью Gulp.

Я могу заставить его работать, но только если я вручную запустил автономный сервер selenium с помощью webdriver-manager start в отдельном окне терминала.

В идеале мне бы хотелось, чтобы моя задача gulp управляла запуском и остановкой сервера, чтобы не добавлять дополнительные накладные расходы для моей команды для выполнения этих тестов.

Я получил настройку, следуя инструкциям здесь:

https://github.com/mllrsohn/gulp-protractor

Они описывают 2 варианта запуска сервера selenium. Один из них заключается в настройке задачи gulp, которая выглядит так же, как webdriver-manager start:

gulp.task('webdriver_standalone', require("gulp-protractor").webdriver_standalone);

Это работает, но не тогда, когда моя задача e2eTest вызывает его как зависимость. Мне нужно запустить gulp webdriver_standalone в отдельном окне терминала.

Я не могу понять другую предложенную опцию.

указывает на секцию selenium в файле конфигурации транспортира

Эти инструкции требуют пути к изолированному серверу selenium-server-standalone в protractor node_modules (./node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar), но в моем каталоге node_modules/protractor/ нет такой банки (или под selenium каталог вообще)

Инструкции для Running Protractor без плагина, похоже, имеют ту же проблему, что и для запуска сервера селена в другом окне терминала.

Есть ли способ получить эту настройку, чтобы одна задача gulp запускала автономный сервер, запускала тесты и закрывала его без каких-либо других вмешательств?

Ответ 1

При запуске Protractor у вас есть несколько вариантов Selenium WebDriver (помните, что WebDriver - это веб-сервис, написанный на Java):

  • Запуск с помощью Транспортера с удаленным (автономным) сервисом. Он может быть локальным или на другой машине. Если Selenium находится на другой машине, то ваше веб-приложение должно быть общедоступным, а не только localhost. Если вы решите использовать автономное обслуживание Selenium, тогда вы настраиваете свой файл config/ Gulp с помощью параметра seleniumAddress.
  • "Задайте" Транспортер "для запуска Селена для вас. В этом случае Protractor будет запускать Selenium WebDriver с файлом Jar, который вы предоставляете в конфигурации seleniumServerJar.
  • Не используйте Selenium WD. Вместо этого используйте прямое соединение, совместимое с Chrome и (возможно) только с Firefox.

В вашем случае просто запустите:

./node_modules/protractor/bin/webdriver-manager update

Он будет загружать селен. Затем укажите конфигурацию в правильную банку.

Ответ 2

Самый простой способ заставить это работать локально - использовать локальный Selenium Standalone jar, как предложил Игорь в варианте №2. (Получить gulp довольно сложно, чтобы запустить webdriver-manager start в качестве порожденной задачи child_process или async.) Вы можете легко получить эту банку в своей папке node_modules, используя:

npm install selenium-server-standalone-jar --save-dev

Затем в вашем комментарии protractor.conf.js или удалите строку seleniumAddress и добавьте строку для seleniumServerJar.

exports.config = {
    seleniumServerJar: '../node_modules/selenium-server-standalone-jar/jar/selenium-server-standalone-2.47.1.jar',
    //seleniumAddress: 'http://localhost:4444/wd/hub',
    /* Lines below for completeness only, leave yours as is. */
    framework: 'jasmine2',
    specs: ['login-spec.js'],
    multiCapabilities: [{
        browserName: 'chrome',
        browserName: 'firefox'
    }]
};