量angular器/selenium“无法findchromedriver”(在Windows上)

我按照这个教程安装了量angular器,当我使用webdriver-manager更新时说:

selenium standalone is up to date. chromedriver is up to date. 

当我尝试运行量angular器testing时,它会说:

 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 

我检查了local.dp.js ,看到它试图从.. \ node_modules \ protractor \ selenium \ chromedriver加载chromedriver,但只有一个名为chromedriver_2.9的空zip文件。

所以我手动下载了chromedriver并将其复制到这个位置,产生了一个新的错误:

 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 

任何任何想法?

如果您在代理之后,请尝试先设置代理,然后运行webdriver update:

 npm config set proxy http://<proxy.com>:port webdriver-manager update 

我也面临这个错误,当我阅读教程时,它不包括如何安装量angular器和webdriver作为您的项目(位于./node_modules)的本地依赖项。

如果这是你喜欢的(可能是因为你可能想使用grunt-protractor-runner,并且以后者的方式运行你的testing),而不是全局安装,这个解决scheme适用于我:

  1. 安装量angular器:

npm install protractor --save-dev

  1. 使用webdriver-manager安装selenium和webdrivers,方法是运行:

./node_modules/protractor/bin/webdriver-manager update

调用这个命令后,看看./node_modules/protractor和它的子文件夹来validation它。 应该可以使用一个叫chromedriver selenium文件夹。

请注意,量angular器没有安装为“全局”,从命令行调用它将导致“找不到通信”错误。 你可以用这个命令来运行它: ./node_modules/protractor/bin/protractor

另外,为你的package.json添加一个脚本定义可能是一个好主意,所以下一次你从零开始安装所有依赖关系时,npm自动设置webdrivers。 为此,将其添加到您的package.json文件中: "scripts": { "postinstall": "./node_modules/protractor/bin/webdriver-manager update" }

希望这可以帮助你进一步…

我跟着这个教程,并有同样的问题。 这里的问题是你需要在你的量angular器configuration文件中指定Selenium jar和chrome驱动exe的path。 我的AppData文件夹全局安装,所以这是我的protractor.confg.js文件的样子:

 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/' }; 

这似乎是诀窍。

Jeez,这么多答案…

在Mac上,这为我工作:

 $ npm install chromedriver $ ln -sf ~/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe 

有GOT是一个更好的方法来解决它,但至less这让我继续前进。

环顾四周后,我注意到包含在angular phonecat repo中的package.json文件定义了一个update-webdriver web update-webdriver任务。

运行这个任务(用npm run update-webdriver )为我修复了量angular器。

Chrome驱动程序可以存在于任何位置,但是如果您通过“webdriver-manager”安装,量angular器跑步者似乎希望它位于存在的位置。 因此,它可以安装“npm install chromedriver”,它将它放在不同的位置,如:/ usr / local / lib / node_modules / chromedriver / lib / chromedriver / chromedriver

在这种情况下,configuration文件将需要设置在这个位置看,但是有一个简单的解决scheme… …

如果webdriver-manager无法下载chromedriver或者selenium-standalone,默认位置将会有0字节的文件,这会导致这个错误。 不幸的是,这可能会发生与代理相关的问题。 一旦损坏的文件在那里,更新检查过程认为一切都是最新的,但事实并非如此。

此外,webdriver-manager的代理configuration与npm不同。 对于webdriver-manager,执行更新的语法是:

 sudo webdriver-manager update --proxy=http://<your proxy server>/ 

清除0字节文件并重新运行此更新命令应该用正确的数据replace文件。 我的机器上这些文件的位置是:

 /usr/local/lib/node_modules/protractor/selenium 

我遵循angular的教程时遇到类似的问题:

https://docs.angularjs.org/tutorial/step_03

并相应地检查了代码:

 git checkout -f step-3 

在angular-phonecat / package.json devDependencies中,量angular器版本是“〜1.0.0”,导致npm总是下载一个损坏的文件:

angularphonecat / node_modules /量angular器/selenium/ chromedriver_2.10.zip

因为上面的zip文件不能正常打开,所以下面的错误存在:

/Users/karlli/dev/projects/angular-phonecat/node_modules/protractor/node_modules/adm-zip/zipFile.js:66 throw Utils.Errors.INVALID_FORMAT; ^无效或不支持的zip格式。 找不到END标头

有两个解决scheme:

  1. 符号链接正确的一个

ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe

谢谢@bronson 🙂

  1. 升级量angular器的依赖版本经过多次testing,我发现最小可行版本是1.1.0。

angularphonecat /的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" }, 

在我的情况下,这是由于损坏的chromedriver zip文件。

我已经做了以下事情来解决这个问题。

  1. 从ChromeDriver下载页面下载chromedriver zip

  2. “node_modules \ protractor \ selenium \” (即复制“chromedriver.exe”到这个位置) 压缩该文件,

然后开始按预期工作。 希望这会帮助你。

如果在Windows上,您可能需要设置一个HTTP_PROXY环境variables。 在您的命令提示符下尝试这些步骤,假设您的代理服务器是http://proxy.you.com:8080

  1. SETX HTTP_PROXY http://proxy.you.com:8080 (它应该返回成功:指定的值已保存,也可以在系统属性…高级…环境variables中执行此操作)
  2. closures你的命令提示符窗口并重新打开。 ( 这可以确保您的新环境variables将在您的会话中使用 。)
  3. 现在运行你的命令: webdriver-manager update

在mac osx上,将量angular器的package.json中的版本更改为“*”,删除node_modules,然后重新安装。

独立的selenium文件是腐败的,所以我不得不覆盖它,直接复制到文件夹。

 C:/Users/****/AppData/Roaming/npm/node_modules/protractor/selenium/ 

此外,我不得不重新命名的chromedriver所以它实际上被称为“chromedriver”,而不是“chromedriver.exe”。

 C:/Users/****/AppData/Roaming/npm/node_modules/protractor/selenium/chromedriver 

这部分发生是因为我没有在webdriver中设置代理。 你可以在接受的答案中看到解决scheme。

对我来说, npm installnpm run update-webdriver命令只是不断下载损坏的Chromedriver_x.xx.zip文件。 所以我试着运行webdriver-manager update ,它工作。

在Windows上,我遇到了一个在我的Mac上运行良好的项目的麻烦。 终于为我完成的命令是:

 node node_modules\protractor\bin\webdriver-manager update 

只需将“preprotractor”:“npm install chromedriver”添加到你的package.json

这将一直下载最新的一个。