J'essaie d'apprendre AngularJS. Dans ce cadre, je souhaite apprendre à utiliser des tests de bout en bout. Actuellement, j'ai une structure de répertoire comme celle-ci:
node_modules
.bin
...
protractor
...
node_modules
.bin
adam-Zip
glob
minijasminenode
optimist
saucelabs
Selenium-webdriver
protractor
config.js
src
tests
test.e2e.js
Mon fichier config.js ressemble à ceci:
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 à ceci:
'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 à l'aide de rapporteur, j'exécute la commande suivante à partir de la ligne de commande:
node_modules\.bin\protractor protractor\config.js
Lorsque j'exécute cette commande, le message d'erreur suivant s'affiche:
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)
Qu'est-ce que je fais mal?
J'ai résolu ce problème avec --standalone:
webdriver-manager start --standalone
Je l'ai obtenu en supprimant la ligne suivante de mon config.js
seleniumAddress: 'http://localhost:4444/wd/hub',
Utilisez-vous un serveur Selenium? Le git README indique ce qui suit:
WebdriverJS n'inclut pas nativement le serveur Selenium - vous devez démarrer un serveur Selenium autonome. Tout ce dont vous avez besoin est la dernière version de Selenium-server-standalone.
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 en arrière-plan pour exécuter webdriver-manager, puis exécutez rapporteur:
Start-Process webdriver-manager start -passthru
protractor conf.js
Cela démarrera un serveur Selenium et générera une série de journaux d’informations. Votre test de Protractor enverra des demandes à ce serveur pour contrôler un navigateur local. Laissez ce serveur en marche
Références
Pour moi, cela était dû à des versions incompatibles de Node and Protractor.
Mon fix-
Suivez les étapes indiquées ici https://stackoverflow.com/a/19333717/1902831
npm install -g rapporteur
mise à jour de webdriver-manager
webdriver-manager start
rapporteur conf.js
J'ai également rencontré le même problème, le truc qui a fonctionné pour moi est d'utiliser deux fenêtres de commande, en gardant celle ouverte après avoir tapé webdriver-manager start
et sans appuyer sur enter key (si la touche entrée est enfoncée, le serveur Selenium est arrêté, don ' sais pas pourquoi) ouvre une autre fenêtre cmd et appelle tes tests.
Si vous utilisez le plugin npm protractor-webdriver grunt ( https://www.npmjs.org/package/grunt-protractor-webdriver ), vous pouvez provoquer le même type d'erreur . Ceci est dû à webdriver résiliation juste avant la fin du test. Le test s'exécute avec succès et vous recevez un message du type:
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 ma config Gruntfile.js:
protractor_webdriver: {
options: {
keepAlive : true // True to keep the webdriver alive
},
start: {
},
},
...
J'espère que cela aidera quelqu'un.
JM.
Dans l'espoir que cela puisse aider quelqu'un: J'avais le même problème: rencontrer ECONNREFUSED à l'aide de grunt-protractor-runner
. La nuance de mon cas est que j'exécutais tout mon environnement E2E (fichiers de test, application Web et backend complet) dans un conteneur Docker.
J'ai essayé de courir rapporteur
grunt-protractor-webdriver
supplémentaire pour que Webdriver soit opérationnel manuellement (aucune différence);directConnect
et keepAlive
(en contournant Selenium et en provoquant des accidents liés à Chromedriver, dont l'un a été décrit ici ).La solution était assez simple: augmenter la quantité de mémoire allouée au conteneur. Sur mon ordinateur hôte Windows 10, j'ai effectué les étapes suivantes:
VBoxManage.exe modifyvm default --memory 8192
(via un script shell personnalisé) avant de démarrer le docker-machine (via le script Docker Quickstart, équivalent à docker-machine start
). (Merci à this SO de répondre ).--shm-size=4G
à ma commande docker run
. ( Voir docs ) df -h
sur votre ordinateur invité, en vérifiant la quantité de mémoire montée sur /dev/shm
.En conséquence, je n'ai plus d'erreurs apparemment inexplicables telles qu'ECONNREFUSED.
@ Alexandros Spyropoulos, il m'a fallu un certain temps pour comprendre comment exécuter un rapporteur et je pense que nous avons eu le même problème. Vous devez ouvrir un onglet de terminal et exécuter webdriver-manager start --standalone. Ensuite, ouvrez une autre étiquette de terminal et exécutez le rapporteur ***. Conf.js
Si vous exécutez la démo de rapporteur fournie, vous devriez essayer d'exécuter la configuration du rapporteur dans la même invite de commande que Selenium. Essayez d’exécuter le serveur et le rapporteur Selenium 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)
J'ai rencontré un problème similaire à celui de @David Remie, confronté à la grille/autonome Selenium Docker. Avec un minimum de RAM/CPU, les tests commenceraient avant que le WebDriver soit en place. Une approche moins consommatrice de ressources consiste à attendre quelques secondes avant de tester (exécutez 'sommeil 5' ou quelque chose comme ça).
Augmenter RAM était parfois suffisant comme solution de contournement au problème, mais le vrai problème était que le sélénium CMD (/opt/bin/entry_point.sh, démarre un superviseur qui exécute le pilote Web) à partir de l'image basée sur https://hub.docker.com/r/Selenium/node-base/dockerfile prenait le temps de démarrer le WebDriver Selenium.