Protractorを使用してangular 2アプリケーションをエンドツーエンドでテストしたいのですが、メッセージが行き詰まっています。
"Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds."
Confファイル。
exports.config = {
directConnect: true,
specs: ['spec.js'],
// For angular2 tests
useAllAngular2AppRoots: true,
}
Chromeが開かれ、Webサイトも開かれた後、タイムアウトするまで何も起こりません。
(browser.ignoreSynchronization = true;を使用して)同期を無効にすると、問題ありません。しかし、分度器を使用する主な利点の1つである「自動待機」機能を失います。
このアプリケーションは、angular 2.に完全に基づいています。
私たちの開発者は、私たちはポーリングしていないと言っていました( 分度器ドキュメント によると考えられる原因の1つ)。ところで、websocketアーキテクチャを使用しています。リンクがあるかどうかわかりません。
実際、この問題のトラブルシューティング方法はまったくわかりません。
誰か助けてくれませんか?
あなたの推測は正しいです。このエラーは、angular2アプリケーションで実行されている未解決のタスクがある場合に発生します。
はい、最も一般的な理由は、アプリケーションが$ timeoutまたは$ httpを継続的にポーリングする場合です。Protractorは無期限に待機してタイムアウトします。しかし、これはアプリが11秒以上かかるシナリオでも発生する可能性があります
さまざまなタイムアウトの詳細については、 here を参照してください
デフォルトのタイムアウト値は11秒です。これを変更するには、 config.js で以下の値を調整し、まだ問題が発生するかどうかを確認してください。
/**
* The timeout in milliseconds for each script run on the browser. This
* should be longer than the maximum time your application needs to
* stabilize between tasks.
*/
allScriptsTimeout?: number;
回答 here で報告されているように、browser.ignoreSynchronizationを一時的に有効にすると修正されます。
browser.ignoreSynchronization = true;
(エラーをスローするコード)
browser.ignoreSynchronization = false;
テストケースを変更し、最初のクリックの後に browser.waitForAngularEnabled(false);
と入力すると、動作するはずです。
ただし、推奨される方法は、conf.js
ファイルとしてallScriptsTimeout: 110000