私の経験で、私はこのためにこれらのロケータを使用します。
- ID
- linkText/partialLinkText
- CSSセレクタ
- のXPath
その他:クラス名、タグ名、名前などはすべてCSSセレクタを使って見つけることができます。私はめったに1つのクラス名を必要としないので、複数のクラスを使用することができるようにCSSセレクターを好むだけでなく、より具体的で壊れにくいタグ名を指定することもできます。タグ名はめったに使われません... TABLEやTRタグやTDタグについては、CSSセレクタですべて行うことができます。私は一般的にname
のタグにはid
があるので、id
を好むことがわかります。あなたがあなたの答えで行ったように
私は最近、CSSセレクタが最速であることを、発見しました。 Seleniumはブラウザを使用して検索を行い、CSSセレクタは非常に一般的であるため、さまざまなブラウザではパフォーマンスが最適化されているため、これは理にかなっています。
linkText/partialLinkTextは非常に私は本当にそれらをカウントされませんので、特化されます。私はできる時にそれを使い、それは理にかなっています。私はちょうどBy.cssSelector("#someId")
を使用することについて考えましたが、実際にはそれほど大きな違いはないと思っています。By.id()
はIDを使用するときにちょっとだけ分かります。
私はめったにXPathを使用していないと私は、例えば、他のロケータとそれを達成することができない場合にのみ、
CSSセレクタではできないタグや奇妙な子/子孫のテキストの場合です。私はXPathサポートがブラウザによって異なることを見つけました(そして読んで)、それは遅くなりますので、絶対に必要でない限り避けてください。#1-3で99%の要素を見つけることができました。
IDは、最も耐久性にする必要があります。 LinkTextとpartialLinkTextはおそらく、ページに応じてかなり耐久性があります。適用されるクラスと、CSSセレクタで使用するHTMLの構造は、おそらくページの更新で変更される可能性が最も高いです。ページの部分的な部分が変更されたかどうかは、実際には更新のサイズによって異なります。 CSSセレクタとXPathは、(一般的に)この種の変更の影響を受けます。
最後に、何百もの要素のページを削っていない限り、1ページの遷移は、ロケータメソッドの違いの数百msよりも重要である可能性があります。
私はCSSがおそらく永遠にXPathより速いと思っていますが、それらのベンチマークは本当に古く、もはや有効ではない可能性があります。彼はChrome 32に対してテストを行っていますが、現在のバージョンは54です。私は彼のテストが現在のブラウザで再実行され、何が変わったのかを見たいと思います。 – JeffC
https://youtu.be/IjGDxXCaDnE?t=40m20s :)古いバージョンでは、xpathの方が速くて、どこから聞いたか覚えていないことがわかった... – Moshisho
これはすばらしい、ありがとう!私はこれまで実際にこれを見てきたと思うが、それは長い時間だった。 – JeffC