我在this tutorial之后安装了量角器,当我使用webdriver-manager更新时,它说:
selenium standalone is up to date.
chromedriver is up to date.
当你试图进行量角器测试时,它说:
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
任何想法?
答案 0 :(得分:62)
我也遇到了这个错误,当我阅读教程时,它没有介绍如何安装量角器和webdriver作为项目的本地依赖项(位于./node_modules中)。
如果这是您喜欢的(可能是因为您可能希望使用grunt-protractor-runner并在以后以连续构建方式运行测试)而不是全局安装,此解决方案对我有用:
npm install protractor --save-dev
./node_modules/protractor/bin/webdriver-manager update
调用此命令后,请查看./node_modules/protractor
及其子文件夹以验证它。 1}}中名为selenium
的文件夹应该可用。
请注意,由于量角器未安装为&#34; global&#34;,从命令行调用它将导致未找到&#34; commnad&#34;错误。
您可以使用以下命令运行它:
chromedriver
另外,将一个脚本定义添加到package.json可能是一个好主意,这样下次从零安装所有依赖项时,npm会自动设置webdrivers。为此,将其添加到package.json文件中:
./node_modules/protractor/bin/protractor
希望这可以帮助你进一步......
答案 1 :(得分:27)
如果您在代理后面,请先尝试设置代理,然后再运行webdriver update:
npm config set proxy http://<proxy.com>:port
webdriver-manager update
答案 2 :(得分:23)
我遵循了该教程并遇到了同样的问题。这里的问题是你需要在量角器配置文件中指定你的selenium jar和chrome driver exe的路径。我的全局安装在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/'
};
这似乎可以解决问题。
答案 3 :(得分:13)
在Mac上,这对我有用:
$ npm install chromedriver
$ ln -sf ~/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe
GOT是一种更好的解决方法,但至少这让我继续前进。
答案 4 :(得分:7)
在浏览了一段时间后,我注意到the angular phonecat repo中包含的package.json
文件定义了update-webdriver
任务。
为我运行该任务(使用npm run update-webdriver
)固定量角器。
答案 5 :(得分:4)
Chrome驱动程序可以存在于任何位置,但是量角器运行器似乎希望它位于通过&#34; webdriver-manager&#34;安装它的位置。因此,它可以安装&#34; npm install chromedriver&#34;,它将把它放在不同的位置,例如: 的/ usr /本地/ LIB / node_modules / chromedriver / LIB / chromedriver / chromedriver
在这种情况下,配置文件需要设置为查看此位置,但有一个更简单的解决方案......
如果webdriver-manager无法下载chromedriver或selenium-standalone,则默认位置会有0字节文件,这将导致此错误。不幸的是,这可能发生在代理相关问题上。一旦损坏的文件存在,更新检查过程认为一切都是最新的,但事实并非如此。
此外,webdriver-manager的代理配置与npm不同。对于webdriver-manager,进行更新的语法是:
sudo webdriver-manager update --proxy=http://<your proxy server>/
清除0字节文件并重新运行此更新命令应该用正确的数据替换文件。我的机器上这些文件的位置是:
/usr/local/lib/node_modules/protractor/selenium
答案 6 :(得分:3)
当我按照angular的教程时遇到了类似的问题:
https://docs.angularjs.org/tutorial/step_03
并相应地检查了代码:
git checkout -f step-3
在angular-phonecat / package.json devDependencies中,量角器版本为“~1.0.0”,导致npm总是下载损坏的文件:
角phonecat / node_modules /量角器/硒/ 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标题
有两种解决方案:
ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe
谢谢@bronson: - )
角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"
},
答案 7 :(得分:2)
在我的情况下,这是由于chromedriver zip文件损坏。
我已经做了以下事情来解决这个问题。
在“node_modules \ protractor \ selenium \”(即将“chromedriver.exe”复制到此位置)中提取该zip文件
然后它按预期开始工作。希望这会对你有所帮助。
答案 8 :(得分:1)
如果在Windows上,您可能需要设置HTTP_PROXY
环境变量。假设您的代理服务器为http://proxy.you.com:8080
,请在命令提示符中尝试这些步骤。
SETX HTTP_PROXY http://proxy.you.com:8080
(它应该返回SUCCESS:已保存指定的值。您也可以在系统属性......高级...环境变量中执行此操作) webdriver-manager update
答案 9 :(得分:1)
在mac osx上,将package.json中的版本更改为“*”,删除node_modules,然后重新安装。
答案 10 :(得分:0)
独立的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中设置代理。您可以在the accepted answer。
中查看解决方案答案 11 :(得分:0)
对我来说,npm install
和npm run update-webdriver
命令只是继续下载损坏的Chromedriver_x.xx.zip
文件。所以我试着运行webdriver-manager update
,它运作良好。
答案 12 :(得分:0)
在Windows上,我遇到了一个在我的Mac上正常运行的项目有问题。最终为我完成的命令是:
node node_modules\protractor\bin\webdriver-manager update
答案 13 :(得分:-3)
只需将“preprotractor”:“npm install chromedriver”添加到package.json
这将一直下载最新的一个。