2016-08-02 4 views
2

Seleniumでは、ロケータIDを使用して要素を特定する方が常に良いです。 で、最小ロケータはxpathです(私が間違っている場合は私を修正してください)。 elementを識別するためにロケータを先に進めるべき優先順位または順序はありますか?Selenium Webdriverでは、LinktextまたはCSSの方がパフォーマンスが優れていますか?

+0

深いのXPathロケータ対CSSについて読むためには[こちら](http://elementalselenium.com/tips/32-xpath-vs-css)を見てみましょう。 「初心者のために、XPathとCSSの間のパフォーマンスには劇的な違いはありません」 – metar

+0

[参考](https://www.seleniumeasy.com/selenium-tutorials/selenium-locators) – gks

答えて

0

私はちょうどコメントで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

  1. ネイティブのXpathの2種類があり、それは直接的な方法で行くことにXPathを指示するようなものです。以下のような 例:ネイティブパスを指定することの利点がある。ここ html/head/body/table/tr/td

は、要素を見つけることが、我々はダイレクトパスを言及しているように非常に簡単です。しかし、パスに何らかの変更が加えられた場合(あるものが追加/削除された場合)、xpathは破損します。

  1. 相対Xパス。 相対xpathでは、相対パスを提供します。xpathにその間のパスを伝えて要素を見つけるように指示します。 利点は、特定のパスが変更されていない限り、うまく動作するhtmlに変更がある場合です。アドレスを見つけることは、各ノードをチェックしてそのパスを見つける必要があるため、非常に困難です。ここ
+0

この説明にはおかげさまで、Saurabh .. .. – Indrajit

+0

@Indrajitようこそ、幸せ学習.. :) –

1

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") 
+0

素晴らしい仕事。あなたが書いたスクリプトの詳細を少ししか知ることはできません。ありがとう – DebanjanB

関連する問題