量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适用于我:
- 安装量angular器:
npm install protractor --save-dev
- 使用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:
- 符号链接正确的一个
ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe
谢谢@bronson 🙂
- 升级量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文件。
我已经做了以下事情来解决这个问题。
-
从ChromeDriver下载页面下载chromedriver zip
-
在“node_modules \ protractor \ selenium \” (即复制“chromedriver.exe”到这个位置) 解压缩该文件,
然后开始按预期工作。 希望这会帮助你。
如果在Windows上,您可能需要设置一个HTTP_PROXY
环境variables。 在您的命令提示符下尝试这些步骤,假设您的代理服务器是http://proxy.you.com:8080
。
-
SETX HTTP_PROXY http://proxy.you.com:8080
(它应该返回成功:指定的值已保存,也可以在系统属性…高级…环境variables中执行此操作) - closures你的命令提示符窗口并重新打开。 ( 这可以确保您的新环境variables将在您的会话中使用 。)
- 现在运行你的命令:
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 install
和npm 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
这将一直下载最新的一个。