2017-01-04 7 views
11

Ich bin nur neu zu Winkelmesser, und ich bin beim Starten des Tutorials blockiert. Ich kann nicht die wirkliche Ursache des Fehlers finden ...

Was ich tat:

  1. Winkelmesser (npm install -g protractor)
  2. Update installieren und WebDriver-Manager
  3. copy/paste laufen Beispieldateien aus Winkelmesser Tutorial
  4. run 'Winkelmesser conf.js'

Was erhalte ich:

[11:35:46] I/hosted - Using the selenium server at  http://localhost:4444/wd/hub 
[11:35:46] I/launcher - Running 1 instances of WebDriver 
[11:35:46] E/launcher - Could not initialize class sun.security.ssl.SSLContextImpl$TLSContext 
[11:35:46] E/launcher - WebDriverError: Could not initialize class sun.security.ssl.SSLContextImpl$TLSContext 
    at WebDriverError (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:27:5) 
    at Object.checkLegacyResponse (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:639:15) 
    at parseHttpResponse (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:538:13) 
    at client_.send.then.response (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/http/index.js:472:11) 
    at ManagedPromise.invokeCallback_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) 
    at TaskQueue.execute_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 
    at TaskQueue.executeNext_ (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) 
    at asyncRun (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2820:25) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7 
    at process._tickCallback (internal/process/next_tick.js:103:7) 
From: Task: WebDriver.createSession() 
    at Function.createSession (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver.js:329:24) 
    at Builder.build (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/selenium-webdriver/builder.js:458:24) 
    at Hosted.DriverProvider.getNewDriver (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/driverProviders/driverProvider.js:37:33) 
    at Runner.createBrowser (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/runner.js:198:43) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/built/runner.js:277:30 
    at _fulfilled (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:834:54) 
    at self.promiseDispatch.done (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:863:30) 
    at Promise.promise.promiseDispatch (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:796:13) 
    at /home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:556:49 
    at runSingle (/home/bmargogne/.nvm/versions/node/v6.8.1/lib/node_modules/protractor/node_modules/q/q.js:137:13) 
[11:35:46] E/launcher - Process exited with error code 199 

Hinweise

  1. Protractor: v4.0.14
  2. Java: openjdk 9-Ubuntu 9b134
  3. -System (?): Ubuntu 16.04
  4. NodeJS: v6.8.1
  5. Ich bekomme die gleiche Ausgabe b y unter Verwendung von "capabilities.browserName: 'firefox'" in conf.js

Jede Hilfe wäre willkommen!

+0

Sie verwenden wirklich Java 9? Warum? – fedepad

+0

Haben Sie versucht, 'directConnect: true' in conf.js hinzuzufügen? – fedepad

+0

Und könnten Sie überprüfen, welche Version von Webdriver-Manager Sie ausführen? – fedepad

Antwort

4

Nun, ich werde versuchen, eine Vermutung zu nehmen, da ich keine Erfahrung in diesem Bereich habe.
Das Problem scheint, die folgenden zu sein:

konnte nicht initialisiert Klasse sun.security.ssl.SSLContextImpl $ TLSContext

zumindest nach dem Protokoll, das Sie zeigen, und unter der Annahme, alle Setup für Winkelmesser wurde richtig gemacht.

Dies ist "Zeug" aus JDK-Code.
Lassen Sie uns sehen, warum Java in einigen Teilen zuerst benötigt wird, da es uns helfen wird, ein bisschen ein paar Dinge zu verstehen.
Direkt in der ersten Zeile Ihres Protokolls ist es klar, dass Sie einen Selen-Server verwenden (https://github.com/angular/protractor/blob/master/docs/server-setup.md).
Wie aus dem obigen Link ersichtlich ist, benötigt der Selenserver JDK, so dass wir einen Java "Einstiegspunkt" gefunden haben.

Der Selenserver wird mit dem webdriver-manager gestartet, daher muss im Code für die webdriver-manager ein Aufruf zum Starten von Java vorhanden sein. Mal sehen, wo es ist.
hier an der Quelle der Suche
https://github.com/angular/webdriver-manager/blob/70614a23e289088c852f5c0162a947488ffc77e0/lib/cmds/start.ts

wir, dass Java hier gestartet werden sehen

let seleniumProcess = spawn('java', args, stdio); 

und diese args sind in der folgenden Weise definiert:

let args: string[] = []; 

und das ist gefüllt mit genannt wie dies zum Beispiel:

Ich habe bemerkt, dass Sie erwähnen, verwenden Sie 9 OpenJDK, die wahrscheinlich jetzt noch nicht ist vertrauenswürdig, da es noch nicht für die allgemeine Verfügbarkeit Freigabe:
http://www.java9countdown.xyz/
http://openjdk.java.net/projects/jdk9/

Mein erster Vorschlag: Verwenden Sie ein Produktion stabile Java-Version, wie 8 für den Moment, die in meinem Ubuntu 16.04-Rechner die Standardeinstellung zu sein scheint.

Um ein gutes Gefühl zu bekommen, wo der Fehler Sie stammen sehen könnte, ich folgendes SO Beitrag empfehlen zu lesen: dort
SSLContext initialization und die erste Antwort, die ich ohnehin sehr lehrreich gefunden. Sie können auch hier lesen: https://www.java.com/en/configure_crypto.html.

In Anbetracht dessen würde ich vorschlagen, dass man Java mit der folgenden Systemeigenschaft jdk.tls.client.protocols an startet (obwohl die Standardeinstellungen in Ordnung sein sollten ...). Eine Möglichkeit, dies zu tun wäre, die folgende Zeile

args.push('-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"'); 

zum Beispiel hinzufügen rechts vor dem Aufruf von let seleniumProcess = spawn('java', args, stdio); in der Datei oben erwähnt.

Was sonst könnte man versuchen
Sie könnten prüfen, ob dieser Fehler vermieden werden können Ihr Skript direkt an den Browser, ohne Selen Server Intervention durch den Anschluss. Dies ist machbar, wenn Sie lokal für den Moment laufen und schneller sein sollten, wenn Sie einen Hop vermeiden. Für den Fall, dass sich Ihr Browser entfernt befindet (im Moment nicht Ihr Fall ...), brauchen Sie NEED, um Selenserver zu verwenden.

Wie in der Selenserver-Setup-Seite, die ich am Anfang verlinkt habe, aufgeführt, ist diese Möglichkeit, sie zu vermeiden, tatsächlich aufgeführt. Der Schlüssel Abschnitt in der Selen-Server-Setup-Dokumentation, die dies erwähnen ist die folgende

Direktanschluss an Browser Treiber

Protractor ohne direkt gegen Chrome und Firefox testen können ein Selenium Server. Um dies zu verwenden, setzen Sie in Ihrer Konfigurationsdatei directConnect: true.

directConnect: true - Ihr Testskript kommuniziert direkt mit Chrome Treiber oder Firefox-Treiber unter Umgehung eines beliebigen Selenium-Servers. Wenn dies wahr ist, werden die Einstellungen für seleniumAddress und seleniumServerJar ignoriert.Wenn Sie versuchen, einen anderen Browser als Chrome oder Firefox zu verwenden, wird ein Fehler ausgelöst. Der direkte Verbindungsaufbau mit Browser-Treibern hat den Vorteil, dass Ihre Testskripts schneller starten und schneller ausgeführt werden können.

Also, nehmen Sie die conf.js Sie aus dem Tutorial verwenden, würden Sie eine Linie definieren, diese zusätzliche Konfiguration hinzuzufügen, dh

// conf.js 
exports.config = { 
    directConnect: true 
    framework: 'jasmine', 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['spec.js'] 
} 

Einige Leute haben berichtet, dass mit dieser Option in Kombination mit dem Chrome Browser statt Firefox hat einige Probleme gelöst, die sowieso nicht eng mit Ihrem verwandt scheinen: https://github.com/angular/angular-seed/issues/254

Was noch? Einige Leute haben auch berichtet, dass die chromedriver auf eine bestimmte Version zu aktualisieren hat einige Probleme in der WebDriver gelöst, wenn Chrom, zB: https://github.com/angular/protractor/issues/3640
https://github.com/angular/webdriver-manager/issues/102
So würde ein Vorschlag mit Chrome in den gleichen Betriebsbedingungen, um zu versuchen und Sieh, was du bekommst. Es könnte ohne Probleme laufen.

Bitte beachten Sie, dass alle Softwarekomponenten in bestimmten Fällen auf bestimmte Versionen der Unterkomponenten (bestimmte Browserversionen usw.) angewiesen sind. Überprüfen Sie daher auch, ob diese Anforderungen erfüllt sind. Diese werden in den entsprechenden Seiten aufgelistet für die Software, die Sie verwenden: Winkelmesser, WebDriver-Manager usw.

Wieder ich die Tatsache betonen, dass ich bin weder ein Entwickler in diesen Sprachen oder Frameworks, so meineAnsicht der System ist nicht die beste und am meisten informiert. Ich nehme auch an, dass das Setup bis zum Laufpunkt korrekt durchgeführt wurde.

+1

Sorry für die Verzögerung ... Das ist eine sehr reiche Antwort! Vielen Dank für diesen "methodischen" Ansatz. Eigentlich habe ich Java 8 benutzt und es löst mein Problem. –

+0

funktioniert gleich für mich. Ich habe openjdk-9-jre-headless auf openjdk-8-jre-headless heruntergestuft – fearis

Verwandte Themen