【问题标题】:protractor/selenium "could not find chromedriver at" (on Windows)量角器/硒“找不到 chromedriver”(在 Windows 上)
【发布时间】:2014-04-07 06:30:37
【问题描述】:

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

有人有什么想法吗?

【问题讨论】:

  • 我尝试下载 chromedriver 并将其直接放入 ..\node_modules\protractor\selenium\chromedriver.exe 并产生了一个新错误

标签: windows angularjs selenium selenium-chromedriver protractor


【解决方案1】:

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

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

  1. 安装量角器:

npm install protractor --save-dev

  1. 通过运行以下命令使用 webdriver-manager 安装 selenium 和 webdrivers:

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

调用此命令后查看./node_modules/protractor 及其子文件夹以进行验证。应该有一个名为 selenium 的文件夹,其中包含 chromedriver

请注意,由于量角器未安装为“全局”,因此从命令行调用它会导致“找不到命令”错误。 您可以使用以下命令运行它: ./node_modules/protractor/bin/protractor

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

希望这可以帮助您进一步...

【讨论】:

  • 这个答案实际上以理智的方式解决了问题。谢谢!
  • 适用于 Windows 8.1 企业版。非常感谢!
  • 对我来说,它只需要运行:./node_modules/protractor/bin/webdriver-manager update。惊人的。谢谢
  • 我有 Chrome 浏览器版本 80,我执行了 webdriver-manager 更新,但它抛出了 Could not find chromedriver at 之类的错误我检查了node_modules/Web-driver Manager/Selenium,但它没有浏览器版本 80 的相关 chrome 驱动程序版本。相反,它只有 78,79 之类的 chrome 驱动程序
【解决方案2】:

如果您使用代理,请先尝试设置代理,然后运行 ​​webdriver update:

npm config set proxy http://<proxy.com>:port

webdriver-manager update

【讨论】:

  • 先从/selenium文件夹中删除0字节文件
  • 谢谢。这就是 webdriver-manager 更新不起作用的原因。
  • 您还应该按照here 的描述为 webdriver-manager 设置代理
【解决方案3】:

我遵循了该教程并遇到了同样的问题。这里的问题是您需要在量角器配置文件中指定 selenium jar 和 chrome 驱动程序 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/'

};

这似乎成功了。

【讨论】:

  • 另外需要注意的是,我通过 Grunt 运行量角器,它在端口 9000 上运行连接任务。因此我在配置中指定了 9000。
  • chromeDriver: 'C:/Users//AppData/Roaming/npm/node_modules/protractor/selenium/chromedriver.exe',仅此部分就为我做了。我之前已经在全球范围内安装了 (npm install -g protractor),但我无法从特定目录运行 gulp 任务。谢谢切斯特。
  • 与团队合作时添加绝对路径有点冒险。对我来说,@stitakis 的答案(运行 webdriver-manager 更新)起到了作用。
【解决方案4】:

天啊,这么多答案...

在 Mac 上,这对我有用:

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

必须有更好的方法来解决它,但至少这让我继续前进。

【讨论】:

  • 将此添加到 package.json 将允许 npm install 处理它:"postinstall": "echo -n $NODE_ENV | grep -v 'production' &amp;&amp; ./node_modules/protractor/bin/webdriver-manager update || echo 'will NOT run webdriver install or update in production only'"
  • 下载时压缩文件总是损坏。我不在代理后面,所以我不确定问题所在。但是虽然运行“npm run protractor”下载 chromedriver 并将可执行文件放在 node_modules/chromedriver/lib/chromedriver/ 中,但我能够让它与这个过程一起工作,所以我将它链接到那里而不是 bin/ 目录。当我执行 npm install chromedriver 时,它只是在 bin/ 目录中放置了一个 398 字节的存根。
【解决方案5】:

看了一会,我注意到the angular phonecat repo中包含的package.json文件定义了一个update-webdriver任务。

运行该任务(使用npm run update-webdriver)为我固定量角器。

【讨论】:

    【解决方案6】:

    Chrome 驱动程序可以存在于任何位置,但如果您通过“webdriver-manager”安装它,量角器运行器似乎希望它存在于它存在的位置。因此,可以使用“npm install chromedriver”安装它,这会将其放置在不同的位置,例如: /usr/local/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
    

    【讨论】:

    • 从 protractor 1.0.x 开始使用默认的 npm 环境设置
    【解决方案7】:

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

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

    1. ChromeDriver Download Page下载的chromedriver zip

    2. "node_modules\protractor\selenium\" 处提取该 zip 文件(即将“chromedriver.exe”复制到此位置)

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

    【讨论】:

      【解决方案8】:

      我在学习 Angular 的教程时遇到了类似的问题:

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

      并相应地检查了代码:

      git checkout -f step-3
      

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

      angular-phonecat/node_modules/protractor/selenium/chromedriver_2.10.zip

      由于上面的zip文件无法正常打开,所以存在如下错误:

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

      有两种解决方案:

      1. 符号链接改为正确的链接

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

      谢谢@bronson :-)

      1. 升级protractor的依赖版本 经过多次测试,我发现最小的可用版本是 1.1.0。

      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"
      },
      

      【讨论】:

        【解决方案9】:

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

        node node_modules\protractor\bin\webdriver-manager update
        

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

          • 代理已使用@CleverCoder 给出的答案中定义的--proxy=http://&lt;your proxy server&gt;/ 参数定义。谢谢你。
          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

            独立的 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 中查看解决方案。

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

                这将一直下载最新的。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-05-04
                  • 2015-03-28
                  • 2015-01-31
                  • 2015-09-13
                  • 2013-10-23
                  • 2019-04-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多