web-dev-qa-db-ja.com

「ロケーターに複数の要素が見つかりました」警告

私のテストの1つでは、CSS selectorを使用して要素を見つけています。

element(by.css("ul.nav button"))

クエリに一致する要素は複数ありますが、最初の要素だけが必要なので、セレクタで問題ありません。

問題は、protractorが警告をスローすることです。

警告-ロケーターBy.cssSelector( "ul.nav button")に複数の要素が見つかりました-最初の結果が使用されます

警告を抑制することは可能ですか?言い換えれば、問題を認識しており、警告を表示したくないことをprotractorにどのように知らせることができますか?


protractor開発バージョン(masterブランチから直接インストール)を使用します。

28
alecxe

代わりにこれを試してください:

element.all(by.css("ul.nav button")).first()

基本的に、これは分度器に複数の要素があることを既に知っていて、最初の要素だけが欲しいことを伝えます(質問で言ったように)。

56
Isaac Lyman

警告には理由があります。テストとデータの結び付けが強すぎます。セレクタは一般的すぎるため、より具体的にする必要があります。 element(by.css("ul.nav button:nth-child(1)"))と言うか、検索の範囲を変えることによって。分度器テストは、スタイルやdomをテストするものではなく、ビジネスロジックをテストするものです。

7
Jon

少ないコード:

$$("ul.nav button").first()
1
Yago