-2

そこで、QA担当者が今日来て、htmlのアイテムにIDを付けて、watirを使用して自動化できるようにしました。

私はそれについてあまり知らないので、代わりにクラス名を使用できるかどうかを確認しようとしましたが、それはまったくのくだらないことです。

私はなぜ何かのようなものだろうと思っていました

link(:item, :id => 'save-btn')

watirで設定すると動作しますが、次のようなことはできません

links(:item, :class => 'save-btn')[0] 

browser.links 呼び出しも使用してみましたが、一貫して取得できます

element not visible errors

なぜこれがそんなに難しいのだろうと思っていたのですが、すべてにIDを使用することがすべてに推奨される方法のように思えますか? クラス名をwatirで使用する方法はありますか、それともそれが行われる方法ですか?

4

2 に答える 2

2

CSS クラス属性は、Watir で要素にアクセスするためのごく普通の方法です。アイドそのまま。

ただし、クラス属性の場合、ページ全体で一意である必要がある id 属性とは対照的に、同じクラスを持つ複数の要素が存在する可能性があるため、通常は検索元のコンテキストを指定する必要があります。

例で使用しているフレームワークはわかりませんが、保存ボタンがコンテナー要素にある場合、これは単純な古い watir で行う方法です。

browser.div(id: "container").span(class: "save-btn")

上記のコードは、期待どおり、コンテナー要素内のクラス「save-btn」を持つ最初のスパンを見つけます。

xpathまた、ここの別の回答で示唆されているように、またはcssロケーターを使用しないでください。なんで?それらは非常に壊れやすく、テストの読み取り/保守が困難になるためです。

于 2013-09-17T20:00:27.987 に答える
1

簡単な回答:ソース コードにクラス名を追加することは正しい方向であり、良い習慣と見なす必要があります。ただし、:classほとんどの場合、ロケーターの使用は十分ではありませ:xpath:css。したがって、開発者として先に進んでクラス名を追加しますが、QA 担当者が Watir の使用方法を知っていることを確認する必要があります。単にすべてのロケーターに対して:idorを使用するのではありません。:class

長い回答:サイトが十分に単純な場合、ID を追加するのが最も簡単で最適な方法です。ただし、最近ではExtJSなどの多くの JavaScript フレームワークが動的 ID を作成するため、その場合はソース コードにクラス名を追加することをお勧めします。

たとえば、あなたの場合、クラス名を追加した後、:classlocator を使用するのは悪い選択です。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 は遅いことに注意してください。最後のオプションと見なす必要があります)

于 2013-09-17T02:23:54.570 に答える