Impossible d'exécuter Protractor-ECONNREFUSED connect ECONNREFUSED
J'essaie D'apprendre L'AngularJS. Dans le cadre de cela, je veux apprendre à utiliser des tests de bout en bout. Actuellement, j'ai une structure de répertoire comme ceci:
node_modules
.bin
...
protractor
...
node_modules
.bin
adam-zip
glob
minijasminenode
optimist
saucelabs
selenium-webdriver
protractor
config.js
src
tests
test.e2e.js
Ma config.le fichier js ressemble à ce qui suit:
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 ressemble à ce qui suit:
'use strict';
describe('My Sample', function () {
driver = protractor.getInstance();
beforeEach(function () {
driver.get('#/');
});
it('My First Test', function () {
message = "Hello.";
expect(message).toEqual('World.');
});
});
Lorsque je tente d'exécuter mes tests de bout en bout en utilisant protractor, j'exécute la commande suivante à partir de la ligne de commande:
node_modules.binprotractor protractorconfig.js
Lorsque j'exécute cette commande, je reçois l'erreur suivante:
C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverlibwebdriverpromise.js:1542
throw error;
^
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverhttpindex.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:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriv
erlibwebdriverwebdriver.js:130:49)
at Function.webdriver.WebDriver.createSession (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriver
libwebdriverwebdriver.js:110:30)
at Builder.build (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverbuilder.js:105:20)
at runJasmineTests (C:SrcMyProjectnode_modulesprotractorlibrunner.js:191:45)
at C:SrcMyProjectnode_modulesprotractorlibrunner.js:255:5
at C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverlibgoogbase.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriv
erlibwebdriverpromise.js:1438:20)
at notify (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverlibwebdriverpromise.js:328:12)
at then (C:SrcMyProjectnode_modulesprotractornode_modulesselenium-webdriverlibwebdriverpromise.js:377:7)
Ce qui suis Je fais de mal?
10 réponses
J'ai résolu ce problème avec --autonome drapeau:
webdriver-manager start --standalone
Je l'ai fait fonctionner en supprimant la ligne suivante de ma configuration.js
seleniumAddress: 'http://localhost:4444/wd/hub',
Utilisez-vous un serveur selenium? Le README git indique ce qui suit:
WebdriverJS n'inclut pas nativement le serveur selenium - vous devez démarrer un serveur selenium autonome. Tous vous avez besoin est la dernière sélénium-serveur autonome.
Le message d'erreur est dû à ce qui suit:
[ECONNREFUSED] la tentative de connexion a été ignorée (car la cible n'écoute pas les connexions) ou explicitement rejetée.
Vérifiez L'URL du gestionnaire Webdriver. L'URL par défaut est:
http://localhost:4444/wd/hub
Utilisez un processus d'arrière-plan pour exécuter webdriver-manager, puis exécutez protractor:
Start-Process webdriver-manager start -passthru
protractor conf.js
Cela va démarrer un serveur Selenium et affichera un tas de journaux d'informations. Votre test de rapporteur sera envoyer des demandes à ce serveur pour contrôler un navigateur local. Laissez ce serveur en cours d'exécution
Références à
Pour moi, cela s'était produit en raison de versions incompatibles de Node et Protractor.
Mon correctif -
- Mettre à jour le nœud vers la dernière version (v7.0.0 dans mon cas)
Suivez les étapes indiquées ici https://stackoverflow.com/a/19333717/1902831
- Installez la dernière version du rapporteur (4.0.10 dans mon cas) en utilisant:
Npm install-g protractor
- Ouvrez un autre terminal et exécutez-les commande:
Mise à jour WebDriver-manager
WebDriver-gestionnaire démarrer
- exécuter des tests dans un autre terminal en utilisant:
Rapporteur conf.js
Si vous utilisez le plugin npm protractor-WebDriver grunt ( https://www.npmjs.org/package/grunt-protractor-webdriver ) Vous pouvez exeprience même genre d'erreur. Cela est dû à la résiliation de webdriver juste avant la fin du test. Le test s'exécute avec succès et vous avez un message comme:
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)
Je résous cela en utilisant l'option keepAlive dans le plugin grunt.
Voici mon Gruntfile.js config:
protractor_webdriver: {
options: {
keepAlive : true // True to keep the webdriver alive
},
start: {
},
},
...
J'espère que cela aidera quelqu'un.
JM.
J'ai également rencontré le même problème, l'astuce qui a fonctionné pour moi est d'utiliser deux fenêtres cmd, en gardant celle ouverte après avoir tapé webdriver-manager start
et sans appuyer sur touche Entrée (si la touche entrée est enfoncée,le serveur selenium est arrêté, Je ne sais pas pourquoi) ouvrez une autre fenêtre cmd et appelez vos tests.
@ Alexandros Spyropoulos, il m'a fallu un certain temps pour comprendre comment exécuter protractor et je pense que nous avons eu le même problème. Vous devez ouvrir un onglet terminal et exécuter WebDriver-manager start --standalone. Ensuite, ouvrez une autre étiquette de terminal et exécutez protractor ***.conf.js
Dans l'espoir que cela pourrait aider quelqu'un: j'avais eu le même problème - rencontrer ECONNREFUSED en utilisant grunt-protractor-runner
. La nuance de mon cas est que j'exécutais tout mon environnement E2E (fichiers de test, application web et backend entier) dans un conteneur Docker.
J'ai essayé de lancer le rapporteur
- avec et sans tâche
grunt-protractor-webdriver
supplémentaire pour mettre webdriver en marche ' manuellement '(pas de différence); - avec et sans activer les paramètres
directConnect
etkeepAlive
(contourner le sélénium et entraîner des accidents liés à Chromedriver, dont l'un a été décrit ici).
La solution était plutôt simple: augmenter la quantité de mémoire allouée au conteneur. Sur ma machine hôte Windows 10, j'ai effectué les étapes suivantes:
- exécutez
VBoxManage.exe modifyvm default --memory 8192
(via un script shell personnalisé) avant de démarrer la machine docker (via un script Docker Quickstart, équivalent àdocker-machine start
). (Merci à Ce SO réponse). - changer mon script shell pour exécuter mon conteneur par défaut, en ajoutant l'argument
--shm-size=4G
à ma commandedocker run
. ( Voir docs )- vous pouvez vérifier si cela a fonctionné en exécutant
df -h
dans votre machine invitée, en vérifiant la quantité de mémoire montée sur/dev/shm
.
- vous pouvez vérifier si cela a fonctionné en exécutant
Par conséquent, je n'ai plus d'erreurs apparemment inexplicables telles que ECONNREFUSED.
Si vous exécutez la démo protractor fournie, vous devriez essayer d'exécuter la configuration protractor dans la même invite de commande que selenium. Essayez d'exécuter selenium server et protractor séparément.
Assurez-vous que le premier sélénium s'exécute en suivant la commande.
webdriver-manager start --standalone
Et exécutez le rapporteur dans une fenêtre de commande séparée.
protractor conf.js
(dans mon cas conf.js était le fichier de configuration)