J'ai installé le rapporteur après ce tutoriel et quand j'utilise webdriver-manager update, il dit:
Selenium standalone is up to date.
chromedriver is up to date.
toi quand j'essaye de faire les tests de rapporteur, il dit:
C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:42
throw new Error('Could not find chromedriver at ' +
^
Error: Could not find chromedriver at C:\Users\****\AppData\Roaming\npm\node_modules\protractor\Selenium\chromedriver.exe
at LocalDriverProvider.addDefaultBinaryLocs_ (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:42:15)
at LocalDriverProvider.setupEnv (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\driverProviders\local.dp.js:59:8)
at Runner.run (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\runner.js:308:31)
at process.<anonymous> (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\lib\runFromLauncher.js:32:14)
at process.EventEmitter.emit (events.js:98:17)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)
[launcher] Runner Process Exited With Error Code: 8
J'ai vérifié le fichier local.dp.js et constaté qu'il essayait de charger le lecteur chromedriver à partir de ..\node_modules\protractor\Selenium\chromedriver, mais il n'y avait qu'un fichier Zip vide appelé chromedriver_2
J'ai donc téléchargé manuellement le pilote chromedriver et je l'ai copié à cet emplacement, produisant une nouvelle erreur:
C:\Users\****\AppData\Roaming\npm\node_modules\protractor\node_modules\Selenium-webdriver\lib\webdriver\promise.js:1549
throw error;
^
Error: Server exited with 1
at Error (<anonymous>)
at ChildProcess.onServerExit (C:\Users\****\AppData\Roaming\npm\node_modules\protractor\node_modules\Selenium-webdriver\remote\index.js:193:11)
at ChildProcess.g (events.js:180:16)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at Process.ChildProcess._handle.onexit (child_process.js:797:12)
[launcher] Runner Process Exited With Error Code: 8
Quelqu'un a des idées?
Si vous êtes derrière un proxy, essayez d'abord de configurer le proxy, puis lancez webdriver update:
npm config set proxy http://<proxy.com>:port
webdriver-manager update
Je faisais également face à cette erreur et au moment de lire le didacticiel, il n’expliquait pas comment installer Rapporteur et WebDriver en tant que dépendances locales de votre projet (situées dans ./node_modules).
Si c'est ce que vous préférez (probablement parce que vous voudrez peut-être utiliser grunt-protractor-runner et exécuter votre test plus tard de manière continue, au besoin) au lieu de l'installer globalement, cette solution a fonctionné pour moi:
npm install protractor --save-dev
./node_modules/protractor/bin/webdriver-manager update
Après avoir appelé cette commande, jetez un œil à ./node_modules/protractor
et aux sous-dossiers pour le vérifier. Un dossier appelé Selenium
avec le chromedriver
dans doit y être disponible.
Notez que le rapporteur n’ayant pas été installé en tant que "global", son appel à partir de la ligne de commande entraîne l’erreur "commnad not found". Vous pouvez le lancer à la place avec cette commande: ./node_modules/protractor/bin/protractor
De plus, il peut être judicieux d’ajouter une définition de script à votre package.json, de sorte que vous installiez automatiquement toutes vos dépendances à partir de zéro, npm. Pour cela, ajoutez ceci à votre fichier package.json:
"scripts": {
"postinstall": "./node_modules/protractor/bin/webdriver-manager update"
}
J'espère que cela vous aide plus loin ...
J'ai suivi ce tutoriel et j'ai eu le même problème. Le problème ici était que vous deviez spécifier le chemin d'accès à votre exe de pilotes de jar et chrome Selenium dans votre fichier de configuration de rapporteur. Mine a été installé globalement dans le dossier AppData. Le fichier mineprotractor.confg.jsressemble à ceci:
exports.config = {
specs: [
'test/e2e/**/*.js'
],
chromeDriver: 'C:/Users/<username>/AppData/Roaming/npm/node_modules/protractor/Selenium/chromedriver.exe',
seleniumServerJar: 'C:/Users/<username>/AppData/Roaming/npm/node_modules/protractor/Selenium/selenium-server-standalone-2.40.0.jar',
baseUrl: 'http://localhost:9000/'
};
Cela semblait faire l'affaire.
Bon sang, tellement de réponses ...
Sur le Mac, cela a fonctionné pour moi:
$ npm install chromedriver
$ ln -sf ~/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/Selenium/chromedriver.exe
Il doit y avoir un meilleur moyen de régler le problème, mais au moins, cela me laisse avancer.
Après avoir regardé pendant un moment, j'ai remarqué que le fichier package.json
inclus dans le rapport de phonecat angulaire définit une tâche update-webdriver
.
Exécuter cette tâche (avec npm run update-webdriver
) a corrigé le rapporteur pour moi.
Le pilote Chrome peut exister n'importe où, mais le coureur de rapporteur semble s'attendre à ce qu'il se trouve à l'emplacement où il existerait si vous l'avez installé via "webdriver-manager". Ainsi, il peut être installé avec "npm install chromedriver", ce qui le placera dans un emplacement différent, tel que: /Usr/local/lib/node_modules/chromedriver/lib/chromedriver/chromedriver
Dans ce cas, le fichier de configuration devra être configuré pour regarder à cet emplacement, mais il existe une solution plus simple ...
Si webdriver-manager ne parvient pas à télécharger chromedriver ou Selenium-standalone, il y aura des fichiers de 0 octet à l'emplacement par défaut, ce qui provoquera cette erreur. Malheureusement, cela peut arriver avec des problèmes liés au proxy. Une fois que les fichiers corrompus sont là, le processus de vérification de la mise à jour pense que tout est à jour, mais ce n’est pas le cas.
En outre, la configuration du proxy pour webdriver-manager est différente de celle de npm. Pour webdriver-manager, la syntaxe permettant d'effectuer une mise à jour serait la suivante:
Sudo webdriver-manager update --proxy=http://<your proxy server>/
L'effacement des fichiers de 0 octet et la réexécution de cette commande de mise à jour doivent remplacer les fichiers par leurs données correctes. L'emplacement sur ma machine pour ces fichiers est:
/usr/local/lib/node_modules/protractor/Selenium
J'ai rencontré un problème similaire lorsque j'ai suivi le tutoriel d'angular:
https://docs.angularjs.org/tutorial/step_03
et vérifié le code en conséquence:
git checkout -f step-3
Dans angular-phonecat/package.json devDependencies, la version du rapporteur est "~ 1.0.0", ce qui a amené npm à toujours télécharger un fichier corrompu:
angular-phonecat/module_noeud/rapporteur/sélénium/chromedriver_2.10.Zip
Parce que le fichier Zip ci-dessus ne peut pas être ouvert correctement, l'erreur ci-dessous existe:
/Users/karlli/dev/projects/angular-phonecat/node_modules/protractor/node_modules/adm-Zip/zipFile.js:66 throw Utils.Errors.INVALID_FORMAT; ^ Format Zip non valide ou non pris en charge. Aucun en-tête END trouvé
Il y a 2 solutions:
ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/Selenium/chromedriver.exe
Merci @bronson :-)
angular-phonecat/package.json
"devDependencies": {
"karma": "^0.12.16",
"karma-chrome-launcher": "^0.1.4",
"karma-jasmine": "^0.1.5",
"protractor": "~1.1.0",
"http-server": "^0.6.1",
"tmp": "0.0.23",
"bower": "^1.3.1",
"shelljs": "^0.2.6"
},
Dans mon cas, il s’agissait du fichier Zip chromedriver endommagé.
J'ai fait les démarches suivantes pour résoudre ce problème.
Téléchargé chromedriver Zip à partir de Page de téléchargement de ChromeDriver
A extrait ce fichier Zip à "node_modules\protractor\Selenium \" (c.-à-d. Copié "chromedriver.exe" à cet emplacement)
Ensuite, il a commencé à fonctionner comme prévu. J'espère que ceci vous aidera.
Sur mac osx, modifiez la version de package.json pour rapporteur en "*", supprimez node_modules et réinstallez-la.
Si vous utilisez Windows, vous devrez peut-être définir une variable d'environnement HTTP_PROXY
. Essayez ces étapes dans l'invite de commande, en supposant que votre serveur proxy s'appelle http://proxy.you.com:8080
.
SETX HTTP_PROXY http://proxy.you.com:8080
(Il devrait renvoyer SUCCESS: la valeur spécifiée a été enregistrée. Vous pouvez également le faire dans Propriétés système ... Avancé ... Variables d'environnement) webdriver-manager update
Pour moi, les commandes npm install
et npm run update-webdriver
n'arrêtaient pas de télécharger le fichier corrompu Chromedriver_x.xx.Zip
. J'ai donc essayé d'exécuter webdriver-manager update
, et cela a fonctionné.
Le fichier Selenium autonome était corrompu, je devais donc l'écraser pour le copier directement dans le dossier.
C:/Users/****/AppData/Roaming/npm/node_modules/protractor/Selenium/
De plus, je devais renommer le chromedriver, il est donc appelé "chromedriver" et non "chromedriver.exe".
C:/Users/****/AppData/Roaming/npm/node_modules/protractor/Selenium/chromedriver
Ceci est partiellement dû au fait que je n’ai pas défini le proxy dans Webdriver. Vous pouvez voir la solution à cela dans la réponse acceptée .
Sur Windows, j'avais des problèmes avec un projet qui fonctionnait bien sur mon mac. La commande qui a finalement été faite pour moi était:
node node_modules\protractor\bin\webdriver-manager update