无法运行 Protractor - ECONNREFUSED 连接 ECONNREFUSED

42

我想学习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.');
    });
});

当我尝试使用protractor运行端到端测试时,我从命令行运行以下命令:

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个回答

66
我使用 --standalone 标志解决了这个问题: webdriver-manager start --standalone

2
你把旗子放在哪里了? - Alexandros Spyropoulos
这是一个命令标志。您看到的代码是我使用webdriver管理器运行的命令。 - juanignaciosl
1
你不使用一个 protractor 配置吗?你是手动传递这个参数吗? - Alexandros Spyropoulos
4
请确保更新Webdriver以包括--standalone选项,命令如下:webdriver-manager update --standalone - Nikolay Melnikov
我重新安装了Protractor,并以独立模式运行了webdriver-manager,但仍然出现相同的错误。该怎么办? - sanmoy paul

38

我通过从我的config.js中移除以下行使它工作起来。

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


5
谢谢,我尝试了很多不同的建议,而这是唯一一个对我有效的。 - Fredrik L
2
Shashank,我花了20多个小时,最终找到了你。它成功了,伙计。 - Nick
尼克,这种事情发生在最好的人身上。不过还是谢谢你。 - Shashank Avusali

13

你是否正在运行Selenium服务器?Git README指出:

WebdriverJS不包括Selenium服务器,您必须启动独立的Selenium服务器。您只需要最新的selenium-server-standalone。

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


6
错误信息是由以下原因引起的: 连接尝试被忽略(因为目标没有监听连接)或明确拒绝。
请检查Webdriver管理器的URL。默认URL为:
http://localhost:4444/wd/hub

使用后台进程来运行webdriver-manager,然后运行protractor:

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

这将启动一个Selenium服务器并输出一堆信息日志。您的Protractor测试将向该服务器发送请求以控制本地浏览器。请保持此服务器运行。
参考资料:
- Protractor教程 - Protractor文档:配置文件参考 - CONNECT手册 - POSIX手册

@bobbyg603 通常情况下,当您启动进程时,请设置一个变量来存储对该进程的引用,然后在停止它的命令中稍后引用它。具体而言,语法因shellshell而异。 - Paul Sweatte

5

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

我的解决方法如下:

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

请按照https://dev59.com/Jmgu5IYBdhLWcg3wfHI_#19333717中给出的步骤进行操作。

  1. 使用以下命令安装最新的protractor版本(在我的情况下为4.0.10):

npm install -g protractor

  1. 在另一个终端中执行以下命令:

webdriver-manager update

webdriver-manager start

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

protractor conf.js


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.

2

我也遇到了同样的问题,对我有效的方法是使用两个cmd窗口,一个窗口在输入webdriver-manager start后保持打开状态,不要按下回车键(如果按下回车键,则Selenium服务器将关闭,不知道为什么),另一个cmd窗口用于运行测试。


1

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


1
希望能帮到有需要的人:我遇到了同样的问题——使用grunt-protractor-runner时遇到了ECONNREFUSED。我的情况比较微妙,因为我在Docker容器中运行了整个E2E环境(测试文件、Web应用程序和整个后端)。
我尝试运行protractor:
  • 使用或不使用额外的grunt-protractor-webdriver任务来手动启动webdriver(没有区别);
  • 启用或禁用directConnectkeepAlive设置(绕过Selenium并导致与Chromedriver相关的崩溃,其中之一在这里中描述)。
解决方案非常简单:增加分配给容器的内存量。在我的Windows 10主机上,我执行了以下步骤:
  1. 运行 VBoxManage.exe modifyvm default --memory 8192(通过自定义 shell 脚本)在启动 docker-machine 之前(通过 Docker Quickstart 脚本,相当于 docker-machine start)。 (感谢 this SO answer)。
  2. 更改我的 shell 脚本以运行我的默认容器,在我的 docker run 命令中添加 --shm-size=4G 参数。(请参阅文档
    • 您可以通过在客户机上运行 df -h 并检查挂载在 /dev/shm 上的内存量来验证它是否有效。

结果,我不再遇到看似无法解释的错误,例如 ECONNREFUSED。


0

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

webdriver-manager start --standalone


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接