2016-09-12 10 views
1

条件に一致するElementArrayFinderから最初の要素を取得します。次のコードは、私が期待している要素を私に提供しますが、時間がかかるすべての要素を通過します。分度器は、ElementArrayFinderから単一の要素を取得します。

これにはどのような方法がありますか?

return content.all(by.css('.class')).filter(function(label){ 
     return label.getText().then(function(text){ 
      return text === searchName; 
     }); 
    }).first(); 

結論:Sudharsan Selvarajによって提供さ 回答魅力要素

Florent B.が提供する答えはまた、問題を解決し、はるかに簡単なように見えるの検索大幅に時間を短縮

var ele = content.all(by.xpath(".//*[contains(@class,'class')][normalize-space(text())='some-value']")).first() 

として働いていましたアプローチ。あなたが直接、ラベルの最初の要素にアクセスしないのはなぜ

return content.element(by.cssContainingText('.class', searchName));

+0

それはできるだけ多くの結果を引っ張っていないので、あなたはより具体的なロケータを試みることができます。 – Gunderson

+0

結果が表になっていますが、私はここでより具体的に考えることはできません。いくつかの動作はArray.prototype.someと似ていますが、分度器のコンテキストでどのように適用するのか分かりません。 @Gunderson – taguenizy

答えて

0

あなたは、CSSやテキストで要素を見つけるためにロケータby.cssContainingTextを使用する必要があります。

return content.element(by.cssContainingText('.class', searchName)); 
+0

それは素晴らしい作品です。 xpathを使用するのと同じように動作しますが、より直観的なアプローチのように感じます。 – taguenizy

-1

return content.all(by.css('.class label')).first().getText().then(function (text) { 
     return text === searchName; 
}); 

P.S.コードはテストされませんでしたが、おそらく動作するはずです

+0

私はそれをはっきりと説明しないかもしれません。しかし、私が間違っていなければ、そのコードは同じ戻り値ElementFinderを提供しません。 最初の要素が欲しかっただけの場合: 'return content.all(by.css( '。class'))。first();' しかし条件と一致させたい 疑似例: 私は 'b'要素だけを望んでいますが、それを見つけた後にすべての要素を調べたいとは思っていません['a'、 'b'、.... 'zzzz'] - > ['b'] ' 。 @rampasalaこれはもっと明確な説明と答えに感謝しています。 – taguenizy

1

xpathを使用すると、特定のtext.Lookを持つ要素をxpath以下の場所に見つけることができます。

var ele = content.all(by.xpath(".//*[contains(@class,'class')][normalize-space(text())='some-value']")).first() 
+0

それはトリックです。約120秒〜約9秒。ありがとう – taguenizy

関連する問題