Ich versuche AngularJS zu lernen. In diesem Zusammenhang möchte ich lernen, End-to-End-Tests zu verwenden. Derzeit habe ich eine Verzeichnisstruktur wie folgt:
node_modules
.bin
...
protractor
...
node_modules
.bin
adam-Zip
glob
minijasminenode
optimist
saucelabs
Selenium-webdriver
protractor
config.js
src
tests
test.e2e.js
Meine config.js-Datei sieht folgendermaßen aus:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
specs: [
'../src/tests/test.e2e.js'
],
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000
}
};
test.e2e.js sieht wie folgt aus:
'use strict';
describe('My Sample', function () {
driver = protractor.getInstance();
beforeEach(function () {
driver.get('#/');
});
it('My First Test', function () {
message = "Hello.";
expect(message).toEqual('World.');
});
});
Wenn ich versuche, meine End-to-End-Tests mit Winkelmesser auszuführen, führe ich den folgenden Befehl über die Befehlszeile aus:
node_modules\.bin\protractor protractor\config.js
Wenn ich diesen Befehl ausführen, erhalte ich die folgende Fehlermeldung:
C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\lib\webdriver\promise.js:1542
throw error;
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\http\index.js:12
7:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1528:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
at Function.webdriver.WebDriver.acquireSession_ (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriv
er\lib\webdriver\webdriver.js:130:49)
at Function.webdriver.WebDriver.createSession (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver
\lib\webdriver\webdriver.js:110:30)
at Builder.build (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\builder.js:105:20)
at runJasmineTests (C:\Src\MyProject\node_modules\protractor\lib\runner.js:191:45)
at C:\Src\MyProject\node_modules\protractor\lib\runner.js:255:5
at C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\lib\goog\base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriv
er\lib\webdriver\promise.js:1438:20)
at notify (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\lib\webdriver\promise.js:328:12)
at then (C:\Src\MyProject\node_modules\protractor\node_modules\Selenium-webdriver\lib\webdriver\promise.js:377:7)
Was mache ich falsch?
Ich habe das mit --standalone flag gelöst:
webdriver-manager start --standalone
Ich habe es funktioniert, indem ich die folgende Zeile aus meiner config.js entfernte
seleniumAddress: 'http://localhost:4444/wd/hub',
Betreibst du einen Selenium Server? Das git README besagt Folgendes:
WebdriverJS enthält den Selenium-Server nicht nativ - Sie müssen einen eigenständigen Selenium-Server starten. Alles, was Sie brauchen, ist der neueste Selenium-Server-Standalone.
Die Fehlermeldung hat folgende Ursachen:
[ECONNREFUSED] Der Verbindungsversuch wurde ignoriert (weil das Ziel nicht auf Verbindungen wartet) oder explizit abgelehnt.
Überprüfen Sie die URL des Webdriver-Managers. Die Standard-URL lautet:
http://localhost:4444/wd/hub
Verwenden Sie einen Hintergrundprozess, um den Webtreiber-Manager auszuführen, und führen Sie dann den Winkelmesser aus:
Start-Process webdriver-manager start -passthru
protractor conf.js
Dadurch wird ein Selenium Server gestartet und eine Reihe von Info-Protokollen ausgegeben. Ihr Protractor-Test sendet Anforderungen an diesen Server, um einen lokalen Browser zu steuern. Lassen Sie diesen Server laufen
Verweise
Für mich war dies auf inkompatible Versionen von Node und Protractor zurückzuführen.
Mein Fix-
Folgen Sie den hier angegebenen Schritten https://stackoverflow.com/a/19333717/1902831
npm install -g Winkelmesser
update des Webtreiber-Managers
start des Webtreiber-Managers
winkelmesser conf.js
Ich stand auch vor dem gleichen Problem, der Trick, der für mich funktioniert hat, ist die Verwendung von zwei cmd-Fenstern, die nach der Eingabe von webdriver-manager start
offen bleiben und ohne Eingabe-Taste drücken (wenn die Eingabe-Taste gedrückt wird, wird der Selenium-Server heruntergefahren, don ' Wenn Sie wissen, warum), öffnen Sie ein weiteres Cmd-Fenster und rufen Sie Ihre Tests auf.
Wenn Sie das npm Protractor-Webdriver-Plugin ( https://www.npmjs.org/package/grunt-protractor-webdriver ) verwenden, können Sie die gleiche Art von Fehler feststellen Beendigung kurz vor Testende. Der Test wird erfolgreich ausgeführt und dann erhalten Sie eine Meldung wie:
Session deleted: Going to shut down the Selenium server
Shutting down Selenium server: http://127.0.0.1:4444
Shut down Selenium server: http://127.0.0.1:4444 (OKOK)
d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\Selenium-webdriver\http\index.js:145
callback(new Error(message));
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\Selenium-webdriver\http\index.js:145:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1547:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:419:13)
Ich löse dies mit der keepAlive-Option im Grunt-Plugin.
Hier ist meine Gruntfile.js-Konfiguration:
protractor_webdriver: {
options: {
keepAlive : true // True to keep the webdriver alive
},
start: {
},
},
...
Ich hoffe das hilft jemandem.
JM.
In der Hoffnung, dass es jemandem helfen könnte: Ich hatte das gleiche Problem - auf ECONNREFUSED mit grunt-protractor-runner
gestoßen. Die Nuance in meinem Fall ist, dass ich meine gesamte E2E-Umgebung (Testdateien, Webanwendung und gesamtes Backend) in einem Docker-Container ausgeführt habe.
Ich habe versucht, Winkelmesser laufen zu lassen
grunt-protractor-webdriver
-Task, um den Web-Treiber "manuell" zum Laufen zu bringen (kein Unterschied);directConnect
- und keepAlive
-Einstellungen (unter Umgehung von Selenium und Abstürzen im Zusammenhang mit Chromedriver, von denen einer hier beschrieben wurde).Die Lösung war ziemlich einfach: Erhöhen Sie den dem Container zugewiesenen Speicherplatz. Auf meinem Windows 10 Host-Computer habe ich die folgenden Schritte ausgeführt:
VBoxManage.exe modifyvm default --memory 8192
(über ein benutzerdefiniertes Shell-Skript) aus, bevor Sie den Docker-Computer starten (über das Docker Quickstart-Skript, das äquivalent zu docker-machine start
ist). (Danke an diese SO Antwort ).--shm-size=4G
-Arguments zu meinem docker run
-Befehl. ( Siehe Dokumente ) df -h
auf Ihrem Gastcomputer ausführen. Überprüfen Sie dazu den auf /dev/shm
installierten Arbeitsspeicher.Ich habe daher keine scheinbar unerklärlichen Fehler mehr wie ECONNREFUSED mehr.
@Alexandros Spyropoulos, ich habe ziemlich lange gebraucht, um herauszufinden, wie man einen Winkelmesser laufen lässt. Sie sollten eine Terminal-Registerkarte öffnen und den webdriver-manager start --standalone ausführen. Dann öffnen Sie ein anderes Terminal-Tag und führen Sie den Winkelmesser ***. Conf.js aus
Wenn Sie die mitgelieferte Winkelmesser-Demo ausführen, sollten Sie versuchen, den Winkelmesser config mit demselben Befehl wie Selenium auszuführen. Versuchen Sie, sowohl den Selenium-Server als auch den Winkelmesser separat auszuführen.
Stellen Sie sicher, dass zuerst Selen durch den folgenden Befehl ausgeführt wird.
webdriver-manager start --standalone
Führen Sie den Winkelmesser in einem separaten Befehlsfenster aus.
protractor conf.js
(In meinem Fall war conf.js die Konfigurationsdatei)
Ich hatte ein ähnliches Problem wie @David Remie, das mit dem Selenium Docker-Gitter/Standalone konfrontiert war. Mit minimalem RAM/CPU würden die Tests beginnen, bevor der Web-Treiber in Betrieb war. Ein weniger Ressourcen verbrauchender Ansatz besteht darin, vor dem Testen einige Sekunden zu warten (Run 'sleep 5' oder ähnliches).
Das Erhöhen von RAM war manchmal ausreichend, um das Problem zu beheben. Das eigentliche Problem bestand jedoch darin, dass das Selenium CMD (/opt/bin/entry_point.sh einen Supervisor, der den Webtreiber ausführt) aus dem auf basierenden Image startet. https://hub.docker.com/r/Selenium/node-base/dockerfile nahm sich die Zeit, um den Selenium-Web-Treiber zu starten.