量角器/硒“无法找到chromedriver”(在Windows上)

时间:2014-03-05 09:33:02

标签: windows angularjs selenium selenium-chromedriver protractor

我在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

任何想法?

14 个答案:

答案 0 :(得分:62)

我也遇到了这个错误,当我阅读教程时,它没有介绍如何安装量角器和webdriver作为项目的本地依赖项(位于./node_modules中)。

如果这是您喜欢的(可能是因为您可能希望使用grunt-protractor-runner并在以后以连续构建方式运行测试)而不是全局安装,此解决方案对我有用:

  1. 安装量角器:
  2. npm install protractor --save-dev

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

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

      调用此命令后,请查看./node_modules/protractor及其子文件夹以验证它。 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)

Jeez,这么多答案......

在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标题

有两种解决方案:

  1. 符号链接正确的
  2. ln -sf ~/dev/projects/angular-phonecat/node_modules/chromedriver/bin/chromedriver node_modules/protractor/selenium/chromedriver.exe

    谢谢@bronson: - )

    1. 升级量角器的依赖版本 经过多次测试,我发现最小可行版本是1.1.0。
    2. 角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文件损坏。

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

  1. ChromeDriver Download Page

  2. 下载了chromedriver zip
  3. “node_modules \ protractor \ selenium \”(即将“chromedriver.exe”复制到此位置)中提取该zip文件

  4. 然后它按预期开始工作。希望这会对你有所帮助。

答案 8 :(得分:1)

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

  1. SETX HTTP_PROXY http://proxy.you.com:8080 (它应该返回SUCCESS:已保存指定的值。您也可以在系统属性......高级...环境变量中执行此操作)
  2. 关闭命令提示符窗口并重新打开。 (这可确保您的新环境变量将在您的会话中使用。)
  3. 现在运行您的命令: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 installnpm 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

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