2016-05-26 1 views
12

他にも同じ問題がありますが、解決策はありませんでした。 私はエラーにng:getTestabilityの要素引数にインジェクタがないことをテストしました

Message: 
    Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test" 
    Stack: 
    Error: Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test" 
     at C:\Users\ShapeR\PycharmProjects\ratest\node_modules\jasminewd2\index.js:101:16 
     at Promise.invokeCallback_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:1329:14) 
     at TaskQueue.execute_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2790:14) 
     at TaskQueue.executeNext_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2773:21) 

1 spec, 1 failure 

を取得私のテストイムを実行しようとすると、ここに私のspec.js

describe('Protractor Demo App', function() { 
    it('should have a title', function() { 
    browser.driver.get('http://rent-front-static.s3-website-us-east-1.amazonaws.com/'); 

    expect(browser.getTitle()).toEqual('How It Works'); 
    }); 
}); 

そして、ここで私のconf.js

exports.config = { 
    framework: 'jasmine', 
    rootElement: 'body', 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['spec.js'] 
} 

は、だから私は手動ブートストラップを持っていますbody要素に対してはrootElementをbodyに設定しますが、それは助けになりませんでした。私は手作業によるboostrapingを削除しようとしても、body要素にng-app = 'rentapplicationApp'を追加するだけでしたが、それは何も変わらず、同じエラーです。

何が問題なのですか?

+1

「手動でブートストラップされた」アプリは分度器と同期するのがまだ難しいと思います。あなたは 'browser.ignoreSynchronization = true'でシンクをオフにしても大丈夫でしょうか? – alecxe

+0

また、 '$ timeout'をどこでも' $ interval'に置き換えてみてください。その後、 'body'で定義された' ng-app'を使って定期的にアプリケーションをブートストラップします。まだ同じ問題? – alecxe

+0

@alecxeうん、私は手動ブートストラップをng-appに置き換えて、何も変えないと言った。 $ timeoutを$ intervalに置き換えると、何も変更されません。 ignoreSynchronization = trueこのシンプルなテストの仕事をしてください、しかし私は本当にその解決策を考えていません。なぜなら、私がhttp://www.protractortest.org/#/timeoutsで読んだのは角度のないページに使われていたからです。どちらかと一緒に働かないでください。 – Aldarund

答えて

0

問題は私のアプリをブートストラップしていました。何らかの理由で、ng-appタグで動作しません。唯一の作業溶液は、手動ブートストラップにした文字列でアプリが動作しますが、getTestabilityは失敗しますが、それは、私の場合にあったようにそれ

angular.bootstrap(document, ["rentapplicationApp"]); 

そして、最初の引数には、DOMノードではなく文字列でなければなりません。

1

分度器の中心的な価値は、同期を含めてあなたの角度の読み込みを管理することです。したがって、あなたは使用したくないのが非常に正しいです:browser.ignoreSynchronization = true

エラーメッセージは、分度器が角度を見つけて同期できないことです。これが原因で二つの問題の組み合わせは次のとおりです。

  • ページは準備ができていない、角度がロードされていない
  • ページがロードされていても一度、NG-アプリを見つけることができません

まず、Protractor setup pageから。

ページが手動ブートストラップを行う場合は、分度器はbrowser.getを使用してページを読み込むことができません。その代わりに、基本Webdriverインスタンス - browser.driver.getを使用します。つまり、分度器はあなたのページが完全に読み込まれたことを知らず、あなたのテストが競合状態を避けるためにwaitステートメントを追加する必要があるかもしれません。

ソリューション1

waitのステートメントを追加します。

ソリューション2

手動でブートストラップのための十分な理由を持っていない、または待ちたくない場合は、次の

  • 停止を手動でアプリ
  • 使用して、オーバーbrowser.getをブートストラップbrowser.driver.get
+0

回答ありがとうございます。解決策2は機能しません。私はdriver.getとbrowser.getの両方を試しましたが、何も変わりません。そして私は手作業によるブートストラップなしでそれを試しました。同じエラーです。解決策1はあまりにも機能しませんでした。私はさらに、アプリケーションが確実にロードされているのに10秒間browser.sleepを追加しようとしました。まだ同じエラー。このスニペットをご覧ください。 http://pastebin.com/cK3HfB5w – Aldarund

1

[ng :テスト] getTestability

私は実際に(明示的rootElement: "body.root"を設定することができますルート要素を見つけProtractorため、アプリケーション自体、それがブートストラップされる方法と間違っ何かが、そこにある疑いの要素引数が見つかりませんインジェクターあなたの設定の中で)、ルート要素のためにsetup the injectorに失敗します。

私は何が起こっているのかを段階的に把握しようとしています。まず、ソースから直接起動されたビルドされていないアプリケーションに対して分度器テストを実行して、これがWebpackのものではないことを確認してください。欠陥を構築する。

次に、最新の1.x角度と角度計(3.3.0が最新のバージョンです)にアップグレードしてみます。


現時点で最も簡単な回避策はbrowser.ignoreSynchronization = trueを使用することにより、オフ分度器と角の間の同期をオンにする次のようになります。もちろん

describe("Strange Protractor/Angular problem", function() { 
    beforeEach(function() { 
     browser.ignoreSynchronization = true; 
     browser.get("https://dl.dropboxusercontent.com/u/597502/vxcv/index.html"); 

     var elm = $(".navbar-brand"); 
     browser.wait(EC.presenceOf(elm), 5000); 
    }); 

    it("should have an expected title", function() { 
     expect($(".navbar-brand").getText()).toEqual('RENT APPLICATION'); 
    }); 
}); 

を、この方法には欠点があります - あなたはタイミングの問題に取り組むためにここではbrowser.waitの呼び出しを使用しなければならないでしょう。テストフローは、同期がオンのときと同じくらい自然でシンプルではありません。

+0

私のアプリはwebpackを必要とするため、私はそれ以外の場合は動作していないので、私は最近の角度1.5.5と分度器3.3.0を使用しています。 Didntヘルプ。しかし、私のアプリは正常に動作し、jsエラーはありません、それは動作します。分度器だけがそれをテストできません。 proctractorのバグではありませんか?ディセーブル同期については、分度器を使用する全体のポイントが私のために失われます。 – Aldarund

+0

@Aldarundええええええええええええええええええええええええええは、このページでは最も簡単にお勧めしたいのではありません。私は今までに複数のことを試しましたが、同期でそれを解決することはできませんでした。それは、分裂器で他のアプリをテストする際に遭遇したことのない奇妙な状況です。 Btw、私はコンソール[ここ](https://dl.dropboxusercontent.com/u/597502/vxcv/index.html/)でjsエラーを参照してください。 – alecxe

+0

@alexceあなたはコルズのためにエラーがありますが、通常の状況では発生していませんが、同じエラーです。私は分度器レポに切符を入れましたが、それを調べることなくただ閉じていたので、 "stackoverflowのためのサポート要求"があります。 – Aldarund

関連する問題