web-dev-qa-db-ja.com

分度器を実行できません-ECONNREFUSED接続ECONNREFUSED

私は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)

私は何を間違えていますか?

35
SL Dev

--standaloneフラグでこれを解決しました:

webdriver-manager start --standalone

63
juanignaciosl

Config.jsから次の行を削除することで機能しました

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

Seleniumサーバーを実行していますか? git READMEは次のことを示しています。

WebdriverJSにはSeleniumサーバーがネイティブに含まれていません。スタンドアロンのSeleniumサーバーを起動する必要があります。必要なのは、最新のSelenium-server-standaloneだけです。

ソース: https://github.com/angular/protractor

13
robynhenderson

エラーメッセージの原因は次のとおりです。

[ECONNREFUSED]接続の試行は無視されました(ターゲットが接続をリッスンしていないため)または明示的に拒否されました。

WebdriverマネージャーのURLを確認します。デフォルトのURLは次のとおりです。

http://localhost:4444/wd/hub

バックグラウンドプロセスを使用してwebdriver-managerを実行し、分度器を実行します。

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

これにより、Selenium Serverが起動し、大量の情報ログが出力されます。分度器テストは、このサーバーにリクエストを送信して、ローカルブラウザーを制御します。このサーバーを実行したままにします

参考文献

6
Paul Sweatte

私にとって、これはNodeとProtractorの互換性のないバージョンが原因で発生していました。

私の修正

  1. Nodeを最新バージョンに更新(私の場合はv7.0.0)

こちらの手順に従ってください https://stackoverflow.com/a/19333717/1902831

  1. 以下を使用して、最新の分度器バージョン(私の場合は4.0.10)をインストールします。

npm install -g分度器

  1. 別のターミナルを開き、次のコマンドを実行します。

webdriver-managerアップデート

webdriver-managerの開始

  1. 次を使用して、別のターミナルでテストを実行します。

分度器conf.js

4
Shardul

私も同じ問題に直面しました、私のために働いたトリックは、2つのcmdウィンドウを使用し、webdriver-manager startを入力した後、enter key(enterキーが押された場合、1つを開いたままにすることですSeleniumサーバーがシャットダウンされました。理由はわかりません)別のcmdウィンドウを開き、テストを呼び出します。

2
kavinhuh

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
jmcollin92

それが誰かを助けるかもしれないことを期待して:私は同じ問題を抱えていた-grunt-protractor-runnerを使用してECONNREFUSEDに遭遇した。私の場合のニュアンスは、Dockerコンテナー内でE2E環境全体(テストファイル、Webアプリケーション、およびバックエンド全体)を実行していたことです。

分度器を実行してみた

  • 追加のgrunt-protractor-webdriverタスクを使用して、または使用せずに、Webドライバーを「手動」で起動して実行します(違いはありません)。
  • directConnectおよびkeepAliveの設定を有効または無効にします(Seleniumをバイパスし、Chromedriverに関連するクラッシュを引き起こしました。そのうちの1つは here で説明されていました)。

解決策はかなり単純でした。コンテナに割り当てられるメモリの量を増やします。 Windows 10ホストマシンで、次の手順を実行しました。

  1. Docker-machineを開始する前に(VBoxManage.exe modifyvm default --memory 8192と同等のDocker Quickstartスクリプトを使用して)docker-machine startを実行します(カスタムシェルスクリプトを使用)。 (ありがとう this SO answer )。
  2. デフォルトのコンテナを実行するようにシェルスクリプトを変更し、--shm-size=4G引数をdocker runコマンドに追加します。 ( ドキュメントを参照
    • ゲストマシンでdf -hを実行することで、/dev/shmにマウントされているメモリの量を確認することで、動作するかどうかを確認できます。

その結果、ECONNREFUSEDなどの不可解なエラーが発生しなくなりました。

1
David Remie

@Alexandros Spyropoulos、分度器の実行方法を理解するのにかなり時間がかかりましたが、同じ問題があったと思います。 1つのターミナルタブを開き、webdriver-manager start --standaloneを実行する必要があります。次に、別の端末タグを開き、分度器***。conf.jsを実行します

1
minisand

提供されている分度器のデモを実行する場合、Seleniumと同じコマンドPromptで分度器の設定を実行してみてください。 Seleniumサーバーと分度器の両方を別々に実行してみてください。

次のコマンドでSeleniumが最初に実行されることを確認します。

webdriver-manager start --standalone

そして、別のコマンドウィンドウで分度器を実行します。

protractor conf.js

(私の場合、conf.jsは設定ファイルでした)

0
Vicky Rajkumar

@David RemieがSelenium Dockerグリッド/スタンドアロンで直面した問題と同様の問題に直面しました。最小限のRAM/CPUで、Webdriverが起動する前にテストが開始されます。リソースをあまり消費しないアプローチは、テストする前に数秒待つことです(「sleep 5」などを実行します)。

RAMを増やすと問題の回避策として十分な場合がありましたが、実際の問題は、Selenium CMD(/opt/bin/entry_point.sh、webdriverを実行するスーパーバイザーを開始する) https://hub.docker.com/r/Selenium/node-base/dockerfile に基づく画像は、Selenium Webdriverの起動に時間がかかっていました。

0
Nahshon paz