2016-11-07 9 views
-1

分度器に特定のカスタム属性を持つすべての要素をどのように見つけるか?私はStackoverflowとネットで同様の質問を見つけましたが、タグに制限をつけるxpathを使用しています。カスタム属性の存在によって要素を見つける

element(by.xpath('//div[@custom-attribute]')) 

上記の例とは反対に、同じカスタム属性を持つ異なるタグがあるため、私はタグに制限を入れたくありません。私はタグに関係なく属性を持つすべての要素を探したい。それは可能ですか?

+2

'document.querySelectorAll( 'div [attribute]')'のようなものを使用できませんか? – Cerbrus

+0

このカスタム属性はdiv要素だけでなく、ボタン、ハイパーリンク、その他のタグなどのように定義されているため、その可能性はわかりません。私には他のすべてのタグについての記述はありません。 – user30646

+1

だから?ちょうど 'div'を放棄してください。 – Cerbrus

答えて

4

あなたはCSS selector locatorを使用することができます。

element.all(by.css('[custom-attribute]')); 

あるいは、$$ショートカット経由:

$$('[custom-attribute]'); 

[custom-attribute]custom-attribute属性を持つ任意の要素にマッチしますattribute selectorです。

+0

通常の 'querySelectorAll'の結果を' element.all() 'に渡すことはできませんでしたか?あるいは、私は、ネイティブJSの機能がそこで利用できるという前提で間違っていますか? – Cerbrus

+0

@Cerbrusええ、 'querySelectorAll()'への*直接的なアクセスはありませんが、理論的には '' executeScript() '](http://www.protractortest.org/#/api? view = webdriver.WebDriver.prototype.executeScript)またはカスタムロケータの内部にある - bult-in分度器ロケータの中には、実際には 'by.repeater()'([source](https: /github.com/angular/protractor/blob/7da9c3a910bb000b30bf9ba82ef48c64bd751709/lib/clientsidescripts.js#L177))。ありがとう、良い質問(あなたの答えをdownvotedしていない)。 – alecxe

+0

私はちょっと驚いていました。しかし、これは分度器の「ネイティブ」クエリーセレクターメソッドなので、これはどんな方法でも良い答えです。 – Cerbrus

関連する問題