Selenium
では、ロケータID
を使用して要素を特定する方が常に良いです。 で、最小ロケータはxpath
です(私が間違っている場合は私を修正してください)。 element
を識別するためにロケータを先に進めるべき優先順位または順序はありますか?Selenium Webdriverでは、LinktextまたはCSSの方がパフォーマンスが優れていますか?
答えて
私はちょうどコメントでGK27によって既に提供されているthisリファレンスからいくつかの点を書いています。ここに書き込む目的は、ページがしばらく見つからなかった場合にはっきりすることです。
要素を配置するので、より良い方法を、優先順位が賢明ではリストに[id, name, linkText, partialLinkText, tagName, className, cssSelector, xpath]
である必要があり、ここでリストの最初の値id
はそうで最優先とされています。
IDによって要素の場所:
最も効率的な方法は、好ましい方法は、Webページ上の要素を見つけるためにはID
ことです。 ID
は、簡単に識別できるウェブページ上でユニークになります。目的の要素ならば、見て次の価値が使用するIDがない場合は
: IDは、最も安全かつ最速のロケータオプションであり、常に名前で要素の場所の最初の選択肢
する必要があります名前属性があります。しかし、その名前が常にユニークであることはできないようにしてください。複数の名前がある場合、セレンは常にLinkTextことによって、要素の検索、最初に一致した要素
上でアクションを実行します:
リンクテキストを持つ要素を見つけるのは非常に簡単です。ただし、Webページには一意のリンクが1つしかありません。同じリンクテキストを持つリンクが複数ある場合(ヘッダーとフッターの繰り返しのリンクなど)、そのような場合、Seleniumはlinkで最初に一致する要素に対してアクションを実行します。一部LinkTextことによって、要素の検索
:LinkText
と同様に
、PartialLinkText
も同じパターンで動作しますが、唯一の違いは、部分的にテキストと一致リンクは用途が含まれていることだということです。要素でのTagNameの検索
:
TagName
は、選択し、チェックボックス/ドロップダウンのようなグループ要素で使用することができます。要素によってクラス名の検索
:私達はちょうどそれが唯一のものであることを確認し、findElementByClassName
を使用する場合は
、同じクラス名を持つ複数の要素があるかもしれません。そうでない場合は、classname
とそのサブ要素を使用して拡張する必要があります。
CSSセレクタ:
CSS主にWebページのスタイル規則を提供するために使用して、我々は、CSSを使用して、Webページ内の1つのまたは複数の要素を識別するために使用することができます。 CSSセレクタを使用して要素を識別すると、XPath
と比較してスピードが大好きです。 Cssセレクタを使用して、スクリプトがIEブラウザで同じ速度で実行されるようにすることができます。 CSSセレクタは、常にページ内の複雑な要素を見つける最良の方法です。 複雑なセレクタを使用して要素を探す必要がある場合は、可能であればCSSセレクタを使用することをお勧めします。これはXPathほど柔軟ではありませんが、同じケースの多くをカバーし、XPathで可能なIEに大きなパフォーマンス上のペナルティは示されません。
XPathのセレクター:XPath
によって要素を検索
は非常に複雑なセレクタを使用して要素を見つけるために有用であり、最も柔軟な選択戦略であるが、それは特にIE
で、非常に遅くなる可能性を秘めています。 XPath
による検索は、で同じ検索を行うよりも、1桁小さい場合があります。 IE
にはネイティブのXPath-over-HTML
ソリューションは提供されないため、プロジェクトではJavaScript XPath
の実装を使用する必要があり、従来のバージョンのIE
のJavaScriptエンジンはそれほど遅くありません。
は、XPath
- ネイティブのXpathの2種類があり、それは直接的な方法で行くことにXPathを指示するようなものです。以下のような 例:ネイティブパスを指定することの利点がある。ここ
html/head/body/table/tr/td
は、要素を見つけることが、我々はダイレクトパスを言及しているように非常に簡単です。しかし、パスに何らかの変更が加えられた場合(あるものが追加/削除された場合)、xpathは破損します。
- 相対Xパス。 相対xpathでは、相対パスを提供します。xpathにその間のパスを伝えて要素を見つけるように指示します。 利点は、特定のパスが変更されていない限り、うまく動作するhtmlに変更がある場合です。アドレスを見つけることは、各ノードをチェックしてそのパスを見つける必要があるため、非常に困難です。ここ
この説明にはおかげさまで、Saurabh .. .. – Indrajit
@Indrajitようこそ、幸せ学習.. :) –
がhttps://stackoverflow.com/questionsに要素を配置するための異なる方法のほとんどベンチマークである:
クロム52、ドライバ2.22
15 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
15 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
15 ms for find_element_by_css_selector("[title='go to page 2']")
15 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
16 ms for find_element_by_class_name("top-footer-links")
16 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
16 ms for find_element_by_id("footer-sites")
16 ms for find_element_by_name("q")
16 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
31 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
311 ms for find_element_by_link_text("Area 51")
343 ms for find_element_by_partial_link_text("Stack Apps")
のFirefox 2.47、ドライバ2.53.0
16 ms for find_element_by_class_name("top-footer-links")
16 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
16 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
16 ms for find_element_by_id("footer-sites")
16 ms for find_element_by_name("q")
23 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
23 ms for find_element_by_css_selector("[title='go to page 2']")
47 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
47 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
62 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
1625 ms for find_element_by_link_text("Area 51")
1726 ms for find_element_by_partial_link_text("Stack Apps")
Internet Explorer 11、ドライバ2.53。1
77 ms for find_element_by_name("q")
78 ms for execute_script("return [].find.call(document.getElementsByTagName('a'), function(e){return e.textContent.trim() == 'Physics'});")
78 ms for find_element_by_class_name("top-footer-links")
78 ms for find_element_by_id("footer-sites")
93 ms for find_element_by_xpath("//*[@id='footer-sites']/table/tbody/tr[2]/td[7]/ol/li[3]/a")
108 ms for find_element_by_xpath("//a[text()='Ask Ubuntu']")
109 ms for find_element_by_css_selector("#footer-sites > table > tbody > tr:nth-child(2) > td:nth-child(7) > ol > li:nth-child(2) > a")
125 ms for find_element_by_css_selector("[title='go to page 2']")
125 ms for find_element_by_css_selector("a[href$='math.stackexchange.com']")
140 ms for find_element_by_xpath("//*[normalize-space(.)='Game Development']")
801 ms for find_element_by_link_text("Area 51")
812 ms for find_element_by_partial_link_text("Stack Apps")
素晴らしい仕事。あなたが書いたスクリプトの詳細を少ししか知ることはできません。ありがとう – DebanjanB
- 1. Selenium - LinkTextで見つかった要素のxpathまたはCSSパスを返す
- 2. Drupal対Joomla:どれが優れたパフォーマンスが優れていますか?
- 3. パフォーマンスとメモリが賢明なのはJPGまたはPNGで、Core Imageの方が優れていますか?
- 4. CSSのパフォーマンスは、いくつかのクラスセレクタやnot:not()の方が優れていますか?
- 5. パフォーマンスの方が優れています:外部ドキュメントまたは内部コレクションを参照していますか?
- 6. EBSまたはプライベートAMIの方が優れていますか?
- 7. これはパフォーマンスの面で優れていますか?
- 8. Linktextが動作していません
- 9. ChromeブラウザがSelenium Webdriverで開かれていません
- 10. Selenium Webdriverのパフォーマンス対時間
- 11. DbまたはC#コードの方が処理が優れていますか?
- 12. エンタープライズアプリケーションの方がMySQLまたはSQL Serverが優れていますか?
- 13. コードまたはコントロールのプロパティは、MS-ACCESSの方が優れていますか?
- 14. Firefoxのバージョンは、selenium webdriver 2.25.0でサポートされています。
- 15. RobohelpまたはMadCap Flareのオーサリングツールが優れていますか?
- 16. これは、Djangoイベントアプリの方が優れていますか?
- 17. selenium webdriverを使用してページがロードされたら、いつか待つ方法はありますか?
- 18. これはservice xml形式またはjsonの方が優れています
- 19. 関数ベースのインデックス:NVL2またはDECODEの方が優れていますか?
- 20. パフォーマンス、Java、DBのいずれの機能が優れていますか?
- 21. cssは優先順に優先されますが、必須ですか?importrant?
- 22. なぜmergesortはリンクリストの方が優れていますか?
- 23. MongoDBはMemcachedの方が優れていますか?
- 24. 私のゲームでは、P2Pまたはクライアント/サーバーアーキテクチャが優れていますか?
- 25. Vert.xは、パフォーマンスがはるかに優れているため、Node.jsのユーザーベースに脅威を与えますか?
- 26. ORを使用したMySQL ilikeのパフォーマンスは%%より優れていますか?
- 27. どちらがパフォーマンスに優れていますか?クロス結合または新しいテーブル?
- 28. Azure SQLデータベースプライシング層は、個々のクエリのパフォーマンスよりもパフォーマンスが優れていますか?
- 29. Selenium 2.0/WebDriver clickAt()メソッドがサポートされていません
- 30. Selenium Webdriverでは、テキストがテキストボックスに入力されたら、ボタンをクリックします。
深いのXPathロケータ対CSSについて読むためには[こちら](http://elementalselenium.com/tips/32-xpath-vs-css)を見てみましょう。 「初心者のために、XPathとCSSの間のパフォーマンスには劇的な違いはありません」 – metar
[参考](https://www.seleniumeasy.com/selenium-tutorials/selenium-locators) – gks