Ошибка Selenium Grid на GitLab CI: ошибка пересылки нового сеанса пустой пул виртуальной машины для возможностей установки
поскольку документация по конфигурации GitLab CI и Selenium, как правило, плохая, я прошу о помощи.
конфигурация как пунктом интереса:
gitlab.ci.yml
:
image: node:7
variables:
HUB_PORT_4444_TCP_ADDR: "selenium__hub"
HUB_PORT_4444_TCP_PORT: "4444"
services:
- selenium/hub:latest
- selenium/node-phantomjs:latest
stages:
- test
test:
stage: test
before_script:
- apt-get update
- apt-get install -y default-jdk default-jre
- npm install -s -g @angular/cli@1.0.6
- npm install -s
- node ./node_modules/protractor/bin/webdriver-manager update
script:
- ./node_modules/.bin/protractor protractor.ci.conf.js
protractor.ci.conf.js
:
/*global jasmine */
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'phantomjs',
'phantomjs.binary.path': './node_modules/phantomjs-prebuilt/bin/phantomjs'
},
directConnect: false,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare: function() {
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
},
seleniumAddress: 'http://selenium__hub:4444/wd/hub'
};
С вышеуказанной конфигурацией, GitLab терпит неудачу с:
$ ./node_modules/.bin/protractor protractor.ci.conf.js
(node:3702) DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[09:53:27] I/launcher - Running 1 instances of WebDriver
[09:53:27] I/hosted - Using the selenium server at http://selenium__hub:4444/wd/hub
[09:53:28] E/launcher - Error forwarding the new session Empty pool of VM for setup Capabilities [{phantomjs.binary.path=./node_modules/phantomjs-prebuilt/bin/phantomjs, count=1, browserName=phantomjs}]
[09:53:28] E/launcher - WebDriverError: Error forwarding the new session Empty pool of VM for setup Capabilities [{phantomjs.binary.path=./node_modules/phantomjs-prebuilt/bin/phantomjs, count=1, browserName=phantomjs}]
at Object.checkLegacyResponse (/builds/netaachen/operator-app/node_modules/selenium-webdriver/lib/error.js:505:15)
at parseHttpResponse (/builds/netaachen/operator-app/node_modules/selenium-webdriver/lib/http.js:509:13)
at doSend.then.response (/builds/netaachen/operator-app/node_modules/selenium-webdriver/lib/http.js:440:13)
at process._tickCallback (internal/process/next_tick.js:109:7)
From: Task: WebDriver.createSession()
at Function.createSession (/builds/netaachen/operator-app/node_modules/selenium-webdriver/lib/webdriver.js:777:24)
at createDriver (/builds/netaachen/operator-app/node_modules/selenium-webdriver/index.js:167:33)
at Builder.build (/builds/netaachen/operator-app/node_modules/selenium-webdriver/index.js:632:14)
at Hosted.getNewDriver (/builds/netaachen/operator-app/node_modules/protractor/lib/driverProviders/driverProvider.ts:60:29)
at Runner.createBrowser (/builds/netaachen/operator-app/node_modules/protractor/lib/runner.ts:225:39)
at q.then.then (/builds/netaachen/operator-app/node_modules/protractor/lib/runner.ts:391:27)
at _fulfilled (/builds/netaachen/operator-app/node_modules/protractor/node_modules/q/q.js:834:54)
at self.promiseDispatch.done (/builds/netaachen/operator-app/node_modules/protractor/node_modules/q/q.js:863:30)
at Promise.promise.promiseDispatch (/builds/netaachen/operator-app/node_modules/protractor/node_modules/q/q.js:796:13)
at /builds/netaachen/operator-app/node_modules/protractor/node_modules/q/q.js:556:49
[09:53:28] E/launcher - Process exited with error code 199
ERROR: Build failed: exit code 1
2 ответов
Я neved использовать Гитлаб ки, но есть опыт селен. Поэтому позвольте мне сначала описать некоторые важные соображения:--14-->
- ошибка, которую вы получаете, означает, что в концентраторе нет запрошенного браузера. Вероятно, это связано с тем, что PhantomJS не удалось зарегистрироваться.
- вам не нужно устанавливать ни Java, ни Selenium server для работы с
PhantomJS
. Это отдельная бинарных реализации протокола селен. Поэтому для работы с PhantomJS-просто запустите контейнер с PhantomJS. Например, я бы использовал это:selenoid/phantomjs:2.1.1
файл (сборки здесь) - он просто работаетphantomjs --webdriver=4444
. PhantomJS по умолчанию прослушивает порт8910
но из-за команды выше мы все еще можем использовать4444
. - я думаю, что вам также не нужно использовать
webdriver-manager
который является инструментом Javascript для загрузки Selenium server или двоичных файлов webdriver. Это не нужно для работы с PhantomJS. - не уверен, почему переменные среды, такие как
HUB_PORT_4444_TCP_ADDR
были добавлен. Поэтому я бы убрал их все.
сказав, что давайте попробуем изменить ваши файлы.
gitlab-ci.yml
будет:
image: node:7
services:
- selenoid/phantomjs:2.1.1
stages:
- test
test:
stage: test
before_script:
- npm install -s -g @angular/cli@1.0.6
- npm install -s
script:
- ./node_modules/.bin/protractor protractor.ci.conf.js
protractor.ci.conf.js
становится (только изменено имя контейнера в seleniumAddress
):
/*global jasmine */
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'phantomjs',
'phantomjs.binary.path': './node_modules/phantomjs-prebuilt/bin/phantomjs'
},
directConnect: false,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare: function() {
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
},
seleniumAddress: 'http://selenoid__phantomjs:4444/wd/hub'
};
не уверен, что это baseUrl
- кажется, некоторые вещи транспортира, поэтому я думаю, что не нужно менять. Пожалуйста, задайте больше вопросов, если таковые имеются.
ключ должен использовать Xvfb
на GitLab CI. Это вращает дисплей так --headless
Chrome может запускать спецификации.
я завернул больше информации и куски кода в блогекак запустить AngularJS сквозные тесты на GitLab CI.