it-swarm.com.de

Protractor - ECONNREFUSED kann nicht ausgeführt werden

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? 

34
SL Dev

Ich habe das mit --standalone flag gelöst:

webdriver-manager start --standalone

63
juanignaciosl

Ich habe es funktioniert, indem ich die folgende Zeile aus meiner config.js entfernte

seleniumAddress: 'http://localhost:4444/wd/hub',

29

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.

quelle: https://github.com/angular/protractor

13
annalogarhythm

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

5
Paul Sweatte

Für mich war dies auf inkompatible Versionen von Node und Protractor zurückzuführen.

Mein Fix-

  1. Aktualisieren Sie den Knoten auf die neueste Version (in meinem Fall v7.0.0).

Folgen Sie den hier angegebenen Schritten https://stackoverflow.com/a/19333717/1902831

  1. Installieren Sie die neueste Winkelmesser-Version (in meinem Fall 4.0.10) mit: 

npm install -g Winkelmesser

  1. Öffnen Sie ein anderes Terminal und führen Sie den folgenden Befehl aus:

update des Webtreiber-Managers

start des Webtreiber-Managers

  1. Führen Sie Tests in einem anderen Terminal durch:

winkelmesser conf.js

4
Shardul

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.

2
kavinhuh

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.

2
jmcollin92

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

  • mit und ohne zusätzliche grunt-protractor-webdriver-Task, um den Web-Treiber "manuell" zum Laufen zu bringen (kein Unterschied);
  • mit und ohne Aktivierung der 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:

  1. Führen Sie 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 ).
  2. Ändern des Shell-Skripts zur Ausführung meines Standardcontainers, Hinzufügen des --shm-size=4G-Arguments zu meinem docker run-Befehl. ( Siehe Dokumente )
    • Sie können überprüfen, ob dies funktioniert, indem Sie 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.

1
David Remie

@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 

1
minisand

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)

0
Vicky Rajkumar

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.

0
Nahshon paz