SeleniumのfindElementで、HTMLの要素を選択するとき、xpathやCSSセレクタなど様々な方法で指定することができます。どの要素を操作するか指定した情報のことをロケータ(locator)といいます。

ロケータはどれを使うのが最適なのか、個人的な見解をまとめました。

要素を取得するための方法

HTMLの要素を選択するロケータは、様々な種類があります。

  • class名
  • name属性
  • タグ名
  • id属性
  • cssセレクタ
  • テキストリンク
  • xpath

この中でどの方法を使えば良いのかは結論、cssセレクタを使うべきと考えています。cssセレクタを使う理由は、WEBサイトのページの構成が変わった時にlocatorの定義を組み直すリスクが最小限に抑えられるからです。

ただ、全てCSSセレクタを使う訳ではなく、サイトで使われているタグによって変えています。それは次の2点です。

inputタグでname属性がある場合

name属性はCSSセレクタよりHTMLの変更に強く、コードを短く書けるのでメンテナンス性が良いです。また、name属性はサーバーに値を送るために使わるためれ、変更するとサイトに対する影響範囲も大きいという点で、name属性を変更されることは少ないと考えられます。

aタグでテキストリンクがある場合

操作対象のテキストをコードに直接書くため、コードが読みやすくメンテナンス性が良いです。aタグで構成されたリンクやボタンの名前を変更される事はあまり考えられないので、サイト側で大幅なリニューアルがない限りHTMLの変更にも強いです。

まとめ

CSSセレクタを最優先で使い、状況によって他の方法に変えるのが良いです。考え方はメンテナンス性(HTMLの変更による影響が少なく、Seleniumのコードの可読性が良いもの)を最優先にして選択します。

また、CSSセレクタはそのまま使ってしまうとコードが長くなってしまうため、そのまま使わずに省略して定義します。

このCSSセレクタの省略方法は、別記事で書く予定ですのでお待ちください。