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

Posted

技术标签:

【中文标题】无法运行量角器 - ECONNREFUSED 连接 ECONNREFUSED【英文标题】:Unable to run Protractor - ECONNREFUSED connect ECONNREFUSED 【发布时间】:2013-12-02 01:32:12 【问题描述】:

我正在尝试学习 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)

我做错了什么?

【问题讨论】:

【参考方案1】:

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

webdriver-manager start --standalone

【讨论】:

你把旗帜放在哪里了? 这是一个命令标志。你看到的代码是我用来运行 webdriver manager 的命令。 但是你不使用量角器配置,你是手动传递这个吗? 另外,请确保更新 webdrive 以包含 --standalone 选项,如下所示:webdriver-manager update --standalone 我重新安装了量角器。以独立模式运行 webdriver-manager,但仍然出现同样的错误。怎么办?【参考方案2】:

我通过从我的 config.js 中删除以下行来让它工作

seleniumAddress: 'http://localhost:4444/wd/hub',

【讨论】:

谢谢,我尝试了很多不同的建议,但这是唯一对我有用的建议。 Shashank,我花了20多个小时终于找到你了。它得到了工作的人。 尼克,这发生在我们最好的人身上。不过还是谢谢。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

错误信息是由于以下原因:

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

检查 Webdriver 管理器的 URL。默认网址是:

http://localhost:4444/wd/hub

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

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

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

参考文献

Protractor Tutorial

Protractor Docs: Config File Reference

CONNECT Man Page

POSIX Man Page

【讨论】:

@bobbyg603 通常,设置一个变量以在启动进程时存储对进程的引用,然后在停止它的命令中引用它。具体来说,语法从shell到shell不等【参考方案5】:

对我来说,这是由于 Node 和 Protractor 的版本不兼容造成的。

我的修复-

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

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

    使用以下方法安装最新的量角器版本(在我的情况下为 4.0.10):

npm install -g 量角器

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

webdriver-manager 更新

webdriver-manager 启动

    使用以下命令在另一个终端中运行测试:

量角器 conf.js

【讨论】:

【参考方案6】:

如果您使用 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】:

我也遇到了同样的问题,对我有用的技巧是使用两个 cmd 窗口,在输入 webdriver-manager start 并且不按 回车键(如果按下回车键)后保持一个打开selenium 服务器已关闭,不知道为什么)打开另一个 cmd 窗口并调用您的测试。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

我试过运行量角器

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

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

    在启动 docker-machine(通过 Docker Quickstart 脚本,相当于docker-machine start)之前运行VBoxManage.exe modifyvm default --memory 8192(通过自定义shell 脚本)。 (感谢this SO answer)。 更改我的 shell 脚本以运行我的默认容器,将--shm-size=4G 参数添加到我的docker run 命令。 (See docs) 您可以通过在您的客户机上运行 df -h 来验证它是否有效,方法是检查安装在 /dev/shm 上的内存量。

因此,我不再出现 ECONNREFUSED 等看似莫名其妙的错误。

【讨论】:

【参考方案10】:

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

确保首先通过以下命令运行 selenium。

webdriver-manager start --standalone

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

protractor conf.js

(在我的例子中 conf.js 是配置文件)

【讨论】:

【参考方案11】:

我遇到了与 @David Remie 遇到的 Selenium Docker 网格/独立问题类似的问题。使用最少的 RAM/CPU,测试将在 webdriver 启动之前开始。一种资源消耗较少的方法是在测试前等待几秒钟(运行“睡眠 5”或类似的东西)。

增加 RAM 有时足以解决该问题,但真正的问题是 Selenium CMD(/opt/bin/entry_point.sh,启动运行 webdriver 的主管)从基于 https://hub.docker.com/r/selenium/node-base/dockerfile 的图像需要时间来启动 Selenium webdriver。

【讨论】:

【参考方案12】:

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

webdriver-manager start --standalone

【讨论】:

以上是关于无法运行量角器 - ECONNREFUSED 连接 ECONNREFUSED的主要内容,如果未能解决你的问题,请参考以下文章

heroku ECONNREFUSED:为所有运行命令连接 ECONNREFUSED

nodejs 连接mongoose 报错 connect ECONNREFUSED怎么解决

无法启动 WebDriverAgent:无法将命令代理到远程服务器。原始错误:错误:连接 ECONNREFUSED 127.0.0.1:8100

java.net.ConnectException:无法连接到 localhost/127.0.0.1(端口 8080):连接失败:ECONNREFUSED ....(代号一个应用程序)

连接失败:ECONNREFUSED

Prisma 绑定无法连接到 prisma 服务器。请求 http://localhost:4466/ 失败,原因:连接 ECONNREFUSED 127.0.0.1:4466