Выполнение тестов e2e на Sauce Labs от Protractor on Travis

Итак, у меня есть проект с открытым исходным кодом (https://github.com/ahmednuaman/radian), и у меня есть некоторые тесты e2e, которые работают нормально локально, используя Protractor.

Я следил за документами Sauce Labs и соответствующим образом настраивал .travis.yml. Тестирование выполняется прямо до точки, где Protractor пытается подключиться к серверу селена на Sauce Labs, это краткий снимок ошибки:

Running "exec:e2e" (exec) task
Using the selenium server at ahmednuaman-radian:[email protected]:4445
>> 
>> timers.js:103
>> if (!process.listeners('uncaughtException').length) throw e;
>> ^
>> TypeError: Cannot read property 'length' of undefined
>>     at HttpClient.send (/home/travis/.nvm/v0.8.26/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:62:16)

Здесь полный журнал работы: https://travis-ci.org/ahmednuaman/radian/jobs/16250460

Итак, следующее, что я сделал, это попытаться подражать этому локально. Я прочитал Документы Sauce Labs Connect и в конечном итоге выполнил это в моем терминале:

java -jar ~/bin/Sauce-Connect.jar USERNAME PASSWORD

Все началось отлично, точно так же, как и на Travis, но когда я запустил свою задачу grunt e2e (после обновления protractor.conf.coffee в соответствии с конфигурацией Travis локально) и получил ту же ошибку, что и у Travis, здесь снимок:

Running "exec:e2e" (exec) task
Using the selenium server at ahmednuaman-radian:[email protected]:4445
>> 
>> /Users/ahmed/bin/node/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1542
>>       throw error;
>>             ^
>> TypeError: Cannot read property 'length' of null
>>     at HttpClient.send (/Users/ahmed/bin/node/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:62:16)

У меня был Google, но я не мог найти кого-либо еще с этой проблемой. Итак, это мой конфиг? Это проблема с транспортиром /webdriver? Позаботьтесь о том, чтобы пролить свет на это?

Ответ 1

Итак, после повторного чтения всех документов я обнаружил, что мой config.seleniumAddress был неправильным, так как в конце отсутствовал путь /wd/hub; то я получил новую ошибку: он жаловался на мои учетные данные.

После погружения в источник Protractor я нашел этот doozy, он в основном уничтожил все учетные данные sauce*, если я укажу seleniumAddress, поэтому я удалил его из своей конфигурации, попробовал еще раз, и это сработало! Woop woop! Здесь Travis выводит только для удовольствия: https://travis-ci.org/ahmednuaman/radian/jobs/16271613

Таким образом, чтобы заставить Protractor работать в Sauce Labs через Travis, нужно использовать следующие параметры конфигурации:

config.sauceUser = process.env.SAUCE_USERNAME
config.sauceKey = process.env.SAUCE_ACCESS_KEY
config.capabilities =
  'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER
  'build': process.env.TRAVIS_BUILD_NUMBER

И не добавить seleniumAddress.