2017-06-10 9 views
1

Webアプリケーションのe2e用の分度器テストがあります。多くの入力ボックスがあり、それらの大部分は、基礎となるAngular4コードのために生成されたng-reflect-name属性を持っています。ここでは、HTMLスニペットの例を示しますng-reflect属性の2回目の実行で失敗した分度器のテスト

私の問題は、これでのロケータの使用に関するものです。私は、この特定の入力ボックスのためにこのコードを使用する場合 -

element(by.css('[formcontrolname='email']')) 

と任意のsendKeys()操作を実行し、それは完全に罰金を動作します。私はこのロケータを使用する場合

しかし、

element(by.css('[ng-reflect-name="email"]')) 

私のテストでは、最初に成功したために実行されますが、エラーが出て、その後の実行のためにNoSuchElementExceptionを与えます。私はSOとAngularドキュメントを検索しましたが、なぜこれが起こるのか説明できないようです。以前誰かがこの問題に直面していたら、ここで何が起きているのか説明できますか?

答えて

2

ng-reflect-*があるのでfor debugging purposes私はそれらのロケータに依存しません

角度の前に必ず実行されるとは限りませんが、角度は分度器(すべての分度器の「コマンド」が角度付きで同期しています)に「準備ができている」ことを確認します。つまり、入力を検索した時点で、ng-reflect-nameはまだ要素に設定されていません。それでもng-reflect-*属性を引き続き使用しようとしている場合は

、要素が存在することになるのを待つExplicit Waitを追加してみてください:

var EC = protractor.ExpectedConditions; 
var emailInput = element(by.css('[ng-reflect-name=email]')); 
browser.wait(EC.presenceOf(emailInput), 5000); 

emailInput.sendKeys("[email protected]") 
+0

うーんを。あなたが作ったデバッグポイントは私にとっては新しいものなので、心に留めておきます。明示的にwaitを使用して20秒ほど待っていて、失敗しても待機部分についてはわかりません。また、 'ng-reflect- * 'を使って私が使った他のロケータもこの問題はありません。 – demouser123

+0

@ demouser123 hm、ありがとう、私の仮説が正しくない..それはとても美しかった:)しかし、あなたは本当に要素が実際にそこにいるのですか?あなたがあなたと思っているページにいるかどうか再確認してください。 – alecxe

+0

うん。私はそれが欲しいと思うページにいると確信しています。 – demouser123

関連する問題