无法运行量角器 - ECONNREFUSED连接ECONNREFUSED

时间:2013-11-18 18:55:53

标签: angularjs debugging webdriver protractor errno

我正在努力学习AngularJS。作为其中的一部分,我想学习使用端到端测试。目前,我有一个像这样的目录结构:

node_modules
  .bin
  ...
  protractor
    ...
    node_modules
       .bin
       adam-zip
       glob
       minijasminenode
       optimist
       saucelabs
       selenium-webdriver
protractor
  config.js
src
  tests
    test.e2e.js

我的config.js文件如下所示:

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',

    capabilities: {
        'browserName': 'chrome'
    },

    specs: [
        '../src/tests/test.e2e.js'
    ],

    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000
    }
};

test.e2e.js如下所示:

'use strict';

describe('My Sample', function () {
    driver = protractor.getInstance();

    beforeEach(function () {
        driver.get('#/');
    });

    it('My First Test', function () {
        message = "Hello.";
        expect(message).toEqual('World.');
    });
});

当我尝试使用量角器运行我的端到端测试时,我从命令行运行以下命令:

node_modules\.bin\protractor protractor\config.js

当我运行该命令时,收到以下错误:

C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1542
      throw error;
            ^
Error: ECONNREFUSED connect ECONNREFUSED
    at ClientRequest.<anonymous> (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:12
7:16)
    at ClientRequest.EventEmitter.emit (events.js:95:17)
    at Socket.socketErrorListener (http.js:1528:9)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:441:14
    at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\webdriver.js:130:49)
    at Function.webdriver.WebDriver.createSession (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver
\lib\webdriver\webdriver.js:110:30)
    at Builder.build (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\builder.js:105:20)
    at runJasmineTests (C:\Src\MyProject\node_modules\protractor\lib\runner.js:191:45)
    at C:\Src\MyProject\node_modules\protractor\lib\runner.js:255:5
    at C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\base.js:1178:15
    at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriv
er\lib\webdriver\promise.js:1438:20)
    at notify (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:328:12)
    at then (C:\Src\MyProject\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:377:7)

我做错了什么?

12 个答案:

答案 0 :(得分:63)

我用--standalone flag解决了这个问题:

webdriver-manager start --standalone

答案 1 :(得分:29)

我通过从config.js中删除以下行来实现它。

&#13;
&#13;
seleniumAddress: 'http://localhost:4444/wd/hub',
&#13;
&#13;
&#13;

答案 2 :(得分:13)

你在运行selenium服务器吗? git README声明如下:

WebdriverJS本身并不包含selenium服务器 - 您必须启动一个独立的selenium服务器。您所需要的只是最新的selenium-server-standalone。

来源:https://github.com/angular/protractor

答案 3 :(得分:6)

错误消息归因于以下内容:

  

[ECONNREFUSED]忽略连接尝试(因为目标没有侦听连接)或明确拒绝连接。

检查Webdriver管理器的URL。默认URL为:

http://localhost:4444/wd/hub

使用后台进程运行webdriver-manager,然后运行量角器:

Start-Process webdriver-manager start -passthru
protractor conf.js
  

这将启动Selenium Server并输出一堆信息日志。您的Protractor测试将向此服务器发送请求以控制本地浏览器。让该服务器继续运行

<强>参考

答案 4 :(得分:4)

对我来说,这是因为Node和Protractor版本不兼容而发生的。

我的修复 -

  1. 将节点更新到最新版本(在我的情况下为v7.0.0)
  2.   

    按照此处给出的步骤https://stackoverflow.com/a/19333717/1902831

    1. 使用:
    2. 安装最新的量角器版本(在我的情况下为4.0.10)
        

      npm install -g量角器

      1. 打开另一个终端并执行以下命令:
      2.   

        webdriver-manager更新

             

        webdriver-manager start

        1. 使用以下方法在另一个终端中运行测试:
        2.   

          量角器conf.js

答案 5 :(得分:2)

我也遇到了同样的问题,对我来说有用的诀窍就是使用两个cmd窗口,在输入webdriver-manager start并且不按输入密钥(如果输入密钥)后保持一个窗口打开按下selenium服务器关闭,不知道为什么)打开另一个cmd窗口并调用你的测试。

答案 6 :(得分:2)

如果您使用的是npm protractor-webdriver grunt插件(https://www.npmjs.org/package/grunt-protractor-webdriver),您可能会遇到同样的错误。 这是因为测试结束前webdriver终止。测试成功运行,然后您会收到如下消息:

Session deleted: Going to shut down the Selenium server
Shutting down Selenium server: http://127.0.0.1:4444
Shut down Selenium server: http://127.0.0.1:4444 (OKOK)

d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145
      callback(new Error(message));
               ^
Error: ECONNREFUSED connect ECONNREFUSED
    at ClientRequest.<anonymous> (d:\Projets\Clouderial\nodeProjects\cld-apps\node_modules\grunt-protractor-runner\node_modules\protractor\node_modules\selenium-webdriver\http\index.js:145:16)
    at ClientRequest.EventEmitter.emit (events.js:95:17)
    at Socket.socketErrorListener (http.js:1547:9)
    at Socket.EventEmitter.emit (events.js:95:17)
    at net.js:440:14
    at process._tickCallback (node.js:419:13)

我使用grunt插件中的keepAlive选项解决了这个问题。

这是我的Gruntfile.js配置:

protractor_webdriver: {
        options: {
            keepAlive : true   // True to keep the webdriver alive
        },
        start: {
        },
    },
...

我希望这会对某人有所帮助。

JM。

答案 7 :(得分:1)

@Alexandros Spyropoulos,我花了很长时间才弄清楚如何运行量角器,我认为我们遇到了同样的问题。您应该打开一个终端选项卡并运行webdriver-manager start --standalone。然后打开另一个终端标签并运行量角器***。conf.js

答案 8 :(得分:1)

希望它可以帮助某人:我遇到了同样的问题 - 使用grunt-protractor-runner遇到ECONNREFUSED。我的案例的细微差别在于我在Docker容器中运行我的整个E2E环境(测试文件,Web应用程序和整个后端)。

我尝试过运行量角器

  • 有或没有额外的grunt-protractor-webdriver任务,可以让webdriver启动并“手动”运行(没有区别);
  • 启用和不启用directConnectkeepAlive设置(绕过Selenium并导致与Chromedriver相关的崩溃,其中一个被描述为here)。

解决方案相当简单:增加分配给容器的内存量。在我的Windows 10主机上,我执行了以下步骤:

  1. 在启动docker-machine之前运行VBoxManage.exe modifyvm default --memory 8192(通过自定义shell脚本)(通过Docker Quickstart脚本,相当于docker-machine start)。 (感谢this SO answer)。
  2. 更改我的shell脚本以运行我的默认容器,将--shm-size=4G参数添加到我的docker run命令。 (See docs
    • 您可以通过检查df -h上安装的内存量,在您的来宾计算机中运行/dev/shm来验证它是否有效。
  3. 结果,我不再有像ECONNREFUSED这样看似无法解释的错误。

答案 9 :(得分:0)

如果您运行提供的量角器演示,您应该尝试在与selenium相同的命令提示符下运行量角器配置。尝试分别运行selenium服务器和量角器。

通过以下命令确保第一次运行selenium。

webdriver-manager start --standalone

在单独的命令窗口中运行量角器。

protractor conf.js

(在我的情况下,conf.js是配置文件)

答案 10 :(得分:0)

我遇到了一个与Selenium Docker网格/独立的@David Remie相似的问题。如果RAM / CPU最少,则测试将在网络驱动程序启动之前开始。一种较少消耗资源的方法是在测试之前等待几秒钟(运行“ sleep 5”或类似方法)。

增加RAM有时足以解决该问题,但真正的问题是Selenium CMD(/opt/bin/entry_point.sh,启动了基于{{3 }}花了一些时间来启动Selenium Webdriver。

答案 11 :(得分:0)

webdriver-manager start ----- 没有帮助,但下面有帮助

webdriver-manager start --standalone