簡単な回答:ソース コードにクラス名を追加することは正しい方向であり、良い習慣と見なす必要があります。ただし、:class
ほとんどの場合、ロケーターの使用は十分ではありませ:xpath
ん:css
。したがって、開発者として先に進んでクラス名を追加しますが、QA 担当者が Watir の使用方法を知っていることを確認する必要があります。単にすべてのロケーターに対して:id
orを使用するのではありません。:class
長い回答:サイトが十分に単純な場合、ID を追加するのが最も簡単で最適な方法です。ただし、最近ではExtJSなどの多くの JavaScript フレームワークが動的 ID を作成するため、その場合はソース コードにクラス名を追加することをお勧めします。
たとえば、あなたの場合、クラス名を追加した後、:class
locator を使用するのは悪い選択です。ID は:id
一意であると想定されているため、よりも悪い可能性があります。複雑なページの場合、:class
不要な要素を見つけるロケーターはほとんど役に立ちません。
ここで、エラー メッセージは、 class を持つ要素が複数ある可能性があることを意味しますsave-btn
。最初の要素は、操作することができません。
Selenium WebDriver または Watir WebDriver はどちらも XPath と CssSelector をサポートしているため、必要に応じて などの代わりに or を使用する必要があります:xpath
。:css
:id
:class
たとえば、次のようなものです。
links(:item, :css=> '.save-btn:not([style*='display:none'])')[0]
Jarmo Pertmanは、ID/クラスの使用は XPath/Css セレクターを優先することを提案していますが、これは完全には正しくありません。ID/クラスは、XPath/Css セレクターの単なるサブセットです。十分に簡単な場合は ID/クラスを使用しますが、不必要な連鎖は良い習慣ではありません。
browser.div(id: "container").span(class: "save-btn")
は CSS セレクター と同等div#container span.save-btn
です。したがって、CSS セレクターは同一であるため、脆弱性やメンテナンスの問題はありません。
XPath/CSS セレクターは強力なツールです。誰もが学習する必要がありますが、本当に必要な場合にのみ使用してください。悪い XPath/Css セレクターは脆弱です。良いものを見つけてみてください。(ただし、XPath は遅いことに注意してください。最後のオプションと見なす必要があります)