2017-05-30 64 views
8

Ponieważ dokumentacja konfiguracji GitLab CI i Selenium jest ogólnie słaba, proszę o pomoc.Błąd siatki Selenium na GitLab CI: Błąd podczas przesyłania nowej sesji Pusta pula VM dla możliwości konfiguracji

konfiguracji jak w punkcie procentową:

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/[email protected] 
    - 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' 
}; 

W powyższej konfiguracji, GitLab nie z:

$ ./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 
+1

Fajnie, jakie jest twoje pytanie? : P –

+0

Przepraszam, że nie podałem tego pytania w sposób oczywisty i pozostawiając go tytułowi. Dodałem teraz stos awarii. –

+1

port base_url powinien być taki sam jak port centralny? również może ci się przydać https: // github.com/kątowy/kątomierz/issues/1226 – nivesnine

Odpowiedz

1

Mam neved używane Gitlab CI, ale mają doświadczenie Selenium. Pozwól mi najpierw opisać kilka ważnych kwestii:

  1. Otrzymany błąd oznacza, że ​​w koncentratorze nie ma żądanej przeglądarki. Jest tak prawdopodobnie dlatego, że PhantomJS nie zdołał się zarejestrować.
  2. Nie trzeba instalować ani Java, ani serwera Selenium do pracy z PhantomJS. Jest to samodzielny plik binarny implementujący sam protokół Selenium. Aby więc pracować z PhantomJS - wystarczy uruchomić kontener z PhantomJS. Na przykład użyłbym tego: selenoid/phantomjs:2.1.1 (plik kompilacji to here) - to po prostu działa phantomjs --webdriver=4444. PhantomJS domyślnie nasłuchuje na porcie 8910, ale z powodu powyższego polecenia możemy nadal używać 4444.
  3. Myślę, że nie musisz także używać webdriver-manager, który jest narzędziem Javascript do pobierania plików binarnych z serwera Selenium lub webdrivera. Nie jest to konieczne do pracy z PhantomJS.
  4. Nie wiem, dlaczego zmienne środowiskowe, takie jak HUB_PORT_4444_TCP_ADDR zostały dodane. Więc usunę je wszystkie.

Powiedziawszy to, spróbujmy zmodyfikować twoje pliki.

gitlab-ci.yml staje:

image: node:7 

services: 
    - selenoid/phantomjs:2.1.1 

stages: 
    - test 

test: 
    stage: test 
    before_script: 
    - npm install -s -g @angular/[email protected] 
    - npm install -s 
    script: 
    - ./node_modules/.bin/protractor protractor.ci.conf.js 

protractor.ci.conf.js staje (tylko zmieniona nazwa pojemnik w 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' 
}; 

Nie wiem, co jest baseUrl - Wydaje się, że niektóre kątomierz rzeczy, więc myślę, że don” t potrzeba zmiany. Zadaj więcej pytań, jeśli takie istnieją.

+0

Powyższa konfiguracja jest wadliwa z następujących powodów: a) Brakuje "browsers.json' dla selenoidu, jak udokumentowano na https://github.com/aerokube/selenoid b)' aerokube/selenoid: 2.1.1' nie istnieje, obecnie najwyższym tagiem jest '1.3.2'. Po ustawieniu na '1.3.2' selenoid nie uruchomi się' 2017-06-20T09: 21: 56.661951157Z 2017/06/20 09:21:56/usr/bin/selenoid: browsers config: read error: open /etc/selenoid/browsers.json: brak takiego pliku lub katalogu ". –

+1

Mój błąd - musi być "selenoid/phantomjs: 2.1.1", zaktualizowany. Nie potrzebujesz samego Selenoidu - po prostu uruchom kontener w Phantomjs. –

+0

Dzięki za aktualizację. Próbowałem już tego, uruchamia specyfikacje, ale kończy się niepowodzeniem z 'Failed: oczekiwanie na załadowanie strony dla 10000ms', więc wyraźnie nie udało się załadować strony z' localhost: 4200' :( –