2016-04-18 5 views
3

問題はこれと非常に似ています"More than one element found for locator" warning:私はng-repeatを持っています。その中にはdivが2つあります。ng-ifがありますので、divが1つだけ表示されます。 divng-repeatであり、等級はlogin__cell-linkです。私はこのdiv秒の値をチェックする必要があるので、私は問題を警告している`element`と` element.all`を連鎖する方法は?

element.all(by.repeater('item in array')).then(allElements => { 
    allElements[i].element(by.className('login__cell-link')).getText(); 
}); 

を使用してブロックを選択

WARNING - more than one element found for locator By(css selector, .login__cell-link) - the first result will be used

この回答はhttps://stackoverflow.com/a/28464809/4753661使用することを言う:element.all(by.css("ul.nav button")).first()

エラーが発生します。

[TypeError: allElements[i].element.all is not a function]

elementelement.allをチェーンするにはどうすればいいですか、またはこの場合はdivをチェックする方が良いでしょうか?ありがとうございました。

答えて

7

チェーン接続するときに使用.all()がない.element.all()

allElements[i].all(by.className('login__cell-link')).first().getText(); 

をところで、あなたはここで明示的に約束を解決する必要はありませんし、それをすべての方法チェーンすることができます。

element 
    .all(by.repeater('item in array')) 
    .get(i) 
    .all(by.className('login__cell-link')) 
    .first() 
    .getText(); 

恥知らず自己を-promotion:この種のエラーを早期にキャッチしたい場合は、ESLintスタティックコード解析ツールをeslint-plugin-protractorcorrect-chaining ruleと一緒に使用できます。

+0

ありがとう、それは正常に動作します。最後の部分では - 私のコードでは、 'allElements.length' divをチェックするラッパー関数とイテレータがあります。これはコードのちょうど小さなバージョンなので、私はこのように約束します。もう一度あなたの助けに感謝します! – Georgy