要素に名前を付ける方法
CSS IDまたはクラスを使用して要素を識別します。オブジェクトが一意である場合、CSS IDを使用することを推奨します。あなたが使用しているフレームワークを考えてください。例えば、Ruby on Railsでは、name
属性は自動的に割り当てられ、CSS IDまたはクラスを使用するよりも(非直感的に)より良い場合があります
要素を識別する方法。
やtable/tr/td/td
などの形式を好むような位置識別子は避けてください。必要に応じて、データ属性の使用を検討してください。さらに良いことのような回避のレイアウトタグにしてみてください完全ので上記のいずれかのスパンと使用することを、例えば追加することができるためか、などのワイルドカードセレクタところ、今のdiv、スパン、TDなど可能性をtd[id="main_vehicle"
td[class='alternates']
<td>
<span id="main_vehicle">
*[id="main_vehicle"]
*
qaおよびテストにのみ使用されるテスト固有のデータ属性を使用します。
要素の不必要な修飾を避けます。以下を使用して自分自身を見つけるかもしれません:
body.main div#vehicles > form#vehicle input#primary_vehicle_name
ただし、これには、入力フィールドがvehicleの正確なIDを持つフォームに、mainのクラスを持つbodyとidを持つフォームの直接の子を持つvehicleのdivを持つdivのページに残る必要があります車両。その構造のいずれかに対する変更とテストの中断。この場合、あなたはそれを見つけるかもしれません
input#primary_vehicle_name
要素を一意に識別するのに十分です。
目に見えるテキストを参照するテストは避けてください。ユーザーに表示されるページ上のテキストは、通常、サイトが維持および更新されると時間とともに変化するため、css idやcssクラスやデータ属性などの識別子を使用します。などの要素form
、input
およびselect
フォームで使用は、通常、例えば、IDやクラス、との組み合わせで、また、特定の要素の良い部分ですli.vehicle
かinput#first-vehicle
あなたはまた、例えば、独自の識別子を追加することができます<div data-vehicle='dodge'>
。これにより、開発者やデザイナーによって変更される可能性が高い要素IDまたはクラスの使用を回避できます。実際、開発者やデザイナーと協力して、名前と範囲について合意する方が良いことを時が経てわかってきました。それは難しいです。
固定データの維持方法。
実際の要素を識別するのと同様に、ページオブジェクトを優先する値を識別するインラインハードコードセレクターを回避するようにしてください。ハードコーディングされた値のこのパターンに従うjavascript変数の例:
storedVars["eqv_auto_year"] = "2015";
storedVars["eqv_auto_make_1"] = "ALFA ROMEO";
storedVars["eqv_auto_make_2"] = "HONDA";`
Selenium wikiおよびSelenium docsのページオブジェクトの詳細
開発者とのコミュニケーション。
ワークフローの問題である「開発者が変更を加え、QA自動化を中断する」という点での技術的アプローチに関係なく。次のことを確認する必要があります。全員が同じチームです。開発者は同じ統合テストを実行します。両方のグループが標準に合意し、順守しています。doneの定義には、UIテストの実行および場合によっては更新が含まれます。開発者とテスターはテスト計画でペアを組み、チケットのグルーミング(アジャイルを行う場合)に参加し、グルーミングの一環としてUIテストについて話します。命名に使用するアプローチと戦略は、アプリケーション開発者と調整する必要があります。同じページにアクセスできない場合は、オブジェクトの命名をめぐる衝突が好きになるでしょう。Rubyプロジェクト用に最近作成したページオブジェクトメソッドの例:
def css_email_opt_in_true
'auto_policy[email_opt_in][value=1]'
end
def css_phone_opt_in
'*[name="auto_policy[phone_opt_in]"]'
end
def css_phone_opt_in_true
'input[name=phone_opt_in][value=true]'
end
def css_credit_rating
'auto_policy[credit_rating]'
end
JavaScript変数と同じページオブジェクトを次に示します。
storedVars["css_email_opt_in"] = "css=*[name='auto_policy[email_opt_in]']";
storedVars["css_phone_opt_in"]="css=*[name='auto_policy[phone_opt_in]']";
storedVars["css_phone_opt_in_true"]="css=input[name='phone_opt_in'][value=true]";
storedVars["css_credit_rating"]="css=select[name='auto_policy[credit_rating]']";