私は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)
私は何を間違えていますか?
--standaloneフラグでこれを解決しました:
webdriver-manager start --standalone
Config.jsから次の行を削除することで機能しました
seleniumAddress: 'http://localhost:4444/wd/hub',
Seleniumサーバーを実行していますか? git READMEは次のことを示しています。
WebdriverJSにはSeleniumサーバーがネイティブに含まれていません。スタンドアロンのSeleniumサーバーを起動する必要があります。必要なのは、最新のSelenium-server-standaloneだけです。
エラーメッセージの原因は次のとおりです。
[ECONNREFUSED]接続の試行は無視されました(ターゲットが接続をリッスンしていないため)または明示的に拒否されました。
WebdriverマネージャーのURLを確認します。デフォルトのURLは次のとおりです。
http://localhost:4444/wd/hub
バックグラウンドプロセスを使用してwebdriver-managerを実行し、分度器を実行します。
Start-Process webdriver-manager start -passthru
protractor conf.js
これにより、Selenium Serverが起動し、大量の情報ログが出力されます。分度器テストは、このサーバーにリクエストを送信して、ローカルブラウザーを制御します。このサーバーを実行したままにします
参考文献
私にとって、これはNodeとProtractorの互換性のないバージョンが原因で発生していました。
私の修正
こちらの手順に従ってください https://stackoverflow.com/a/19333717/1902831
npm install -g分度器
webdriver-managerアップデート
webdriver-managerの開始
分度器conf.js
私も同じ問題に直面しました、私のために働いたトリックは、2つのcmdウィンドウを使用し、webdriver-manager start
を入力した後、enter key(enterキーが押された場合、1つを開いたままにすることですSeleniumサーバーがシャットダウンされました。理由はわかりません)別のcmdウィンドウを開き、テストを呼び出します。
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。
それが誰かを助けるかもしれないことを期待して:私は同じ問題を抱えていた-grunt-protractor-runner
を使用してECONNREFUSEDに遭遇した。私の場合のニュアンスは、Dockerコンテナー内でE2E環境全体(テストファイル、Webアプリケーション、およびバックエンド全体)を実行していたことです。
分度器を実行してみた
grunt-protractor-webdriver
タスクを使用して、または使用せずに、Webドライバーを「手動」で起動して実行します(違いはありません)。directConnect
およびkeepAlive
の設定を有効または無効にします(Seleniumをバイパスし、Chromedriverに関連するクラッシュを引き起こしました。そのうちの1つは here で説明されていました)。解決策はかなり単純でした。コンテナに割り当てられるメモリの量を増やします。 Windows 10ホストマシンで、次の手順を実行しました。
VBoxManage.exe modifyvm default --memory 8192
と同等のDocker Quickstartスクリプトを使用して)docker-machine start
を実行します(カスタムシェルスクリプトを使用)。 (ありがとう this SO answer )。--shm-size=4G
引数をdocker run
コマンドに追加します。 ( ドキュメントを参照 )df -h
を実行することで、/dev/shm
にマウントされているメモリの量を確認することで、動作するかどうかを確認できます。その結果、ECONNREFUSEDなどの不可解なエラーが発生しなくなりました。
@Alexandros Spyropoulos、分度器の実行方法を理解するのにかなり時間がかかりましたが、同じ問題があったと思います。 1つのターミナルタブを開き、webdriver-manager start --standaloneを実行する必要があります。次に、別の端末タグを開き、分度器***。conf.jsを実行します
提供されている分度器のデモを実行する場合、Seleniumと同じコマンドPromptで分度器の設定を実行してみてください。 Seleniumサーバーと分度器の両方を別々に実行してみてください。
次のコマンドでSeleniumが最初に実行されることを確認します。
webdriver-manager start --standalone
そして、別のコマンドウィンドウで分度器を実行します。
protractor conf.js
(私の場合、conf.jsは設定ファイルでした)
@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の起動に時間がかかっていました。