【自動化テスト入門②】Katalonで学ぶXPath基本編

サムネイル_XPath IT Study

前回【自動化テスト入門①】Katalonで学ぶCSSセレクタ基本編でCSSセレクタについて説明しました。今回はXPathで要素を選択する方法についてまとめました。

XPathとは

XPath は、HTMLやXMLの要素を指定するための書き方です。CSSセレクタと同じように、特定の要素を取得するために使われます。

特に、自動化テストでは以下のような場面でよく利用されます。

  • 特定のテキストを持つ要素を探したい
  • 親子関係を細かく指定したい
  • CSSセレクタでは取得しにくい要素を選択したい

Katalon Studio や Selenium でも頻繁に使われるため、基本的な書き方を覚えておくと便利です。


/ と // の違い

XPathでは / // の違いがとても重要です。

  • /直下の子要素のみを選択します。
  • //階層を飛び越えて、内側にある子孫要素すべてを検索できます。 CSSセレクタの「>」と「スペース(半角空白)」の違いに近いイメージです。

/ (直下の子要素)

HTML例:

<div class="main-box">
  <button>ログイン</button> <!-- ① 選択される -->

  <div>
    <button>キャンセル</button> <!-- ② 選択されない -->
  </div>
</div>

XPath例:

//div[@class='main-box']/button 

選択される要素:

<button>ログイン</button>

// (子孫要素すべて)

HTML例:

<div class="main-box">
  <button>ログイン</button> <!-- ① 選択される -->

  <div>
    <button>キャンセル</button> <!-- ② 選択される -->
  </div>
</div>

XPath例:

//div[@class='main-box']//button

選択される要素:

<button>ログイン</button>

<button>キャンセル</button>

タグ指定

タグ名をそのまま指定できます。

HTML例:

<div>
  <input type="text">
  <button>ログイン</button>
</div>

XPath例:

//button

<!-- 全てのbuttonタグを選択 -->

選択される要素:

<button>ログイン</button>

属性指定

@属性名 を使って要素を指定します。

HTML例:

<button id="login-btn">
  ログイン
</button>

<button id="cancel-btn">
  キャンセル
</button>

XPath例:

//button[@id='login-btn']

<!-- idがlogin-btnのbuttonを選択 -->

選択される要素:

<button id="login-btn">
  ログイン
</button>

class指定

class属性も指定できます。

HTML例:

<button class="login-btn">
  ログイン
</button>

<button class="cancel-btn">
  キャンセル
</button>

XPath例:

//button[@class='login-btn']

<!-- classがlogin-btnのbuttonを選択 -->

選択される要素:

<button class="login-btn">
  ログイン
</button>

テキスト指定

特定の文字を持つ要素を取得できます。

HTML例:

<button>ログイン</button>

<button>キャンセル</button>

XPath例:

//button[text()='ログイン']

<!-- テキストがログインのbuttonを選択 -->

選択される要素:

<button>ログイン</button>

contains(文字を含む)

contains() を使うと、一部の文字を含む要素を取得できます。

1. class属性に文字を含む

HTML例:

<button class="login-btn">
  ログイン
</button>

<button class="login-submit">
  送信
</button>

<button class="cancel-btn">
  キャンセル
</button>

XPath例:

//button[contains(@class,'login')]

<!-- class属性にloginを含むbuttonを選択 -->

選択される要素:

<button class="login-btn">
  ログイン
</button>

<button class="login-submit">
  送信
</button>
2. テキストに文字を含む

HTML例:

<button>
  ログインはこちら
</button>

XPath例:

//button[contains(text(),'ログイン')]

<!-- ログインを含むbuttonを選択 -->

選択される要素:

<button>
  ログインはこちら
</button>

and条件

複数条件を同時に指定できます。

HTML例:

<button class="login-btn" type="submit">
  ログイン
</button>

<button class="login-btn" type="button">
  キャンセル
</button>

XPath例:

//button[@class='login-btn' and @type='submit']

<!-- classとtypeの両方が一致するbuttonを選択 -->

選択される要素:

<button class="login-btn" type="submit">
  ログイン
</button>

or条件

どちらかの条件に一致する要素を選択できます。

HTML例:

<button type="submit">
  ログイン
</button>

<button type="button">
  キャンセル
</button>

XPath例:

//button[@type='submit' or @type='button']

<!-- submit または button を選択 -->

選択される要素:

<button type="submit">
  ログイン
</button>

<button type="button">
  キャンセル
</button>

sibling(兄弟要素)

兄弟要素を取得するときに使います。

1. following-sibling

後ろにある兄弟要素を選択します。

HTML例:

<label>Email</label>
<input type="text">

XPath例:

//label/following-sibling::input

<!-- labelの後ろにあるinputを選択 -->

選択される要素:

<input type="text">

2. preceding-sibling

前にある兄弟要素を選択します。

HTML例:

<label>Email</label>
<input type="text">

XPath例:

//input/preceding-sibling::label

<!-- inputの前にあるlabelを選択 -->

選択される要素:

<label>Email</label>

親要素取得

親要素を取得することもできます。

HTML例:

<div class="wrapper">
  <button>ログイン</button>
</div>

XPath例:

//button/parent::div

<!-- buttonの親divを選択 -->

選択される要素:

<div class="wrapper">
  <button>ログイン</button>
</div>

何番目の要素を指定

XPathでも順番指定ができます。

HTML例:

<ul>
  <li>ホーム</li>
  <li>ログイン</li>
  <li>お問い合わせ</li>
</ul>

XPath例:

//li[2]

<!-- 2番目のli要素を選択 -->

選択される要素:

<li>ログイン</li>

練習Tips

XPathも、Chromeの開発者ツールで実際に試しながら覚えるのがおすすめです。

  • Mac:Command + Option + F
  • Windows:Ctrl + F

例えば:

のように入力して、1つだけ要素が選択されていれば成功です。複数選択される場合は、指定範囲が広すぎる可能性があります。

ヒョニ
ヒョニ

この場合、同じ「コピー」buttonが複数存在していたため、対象を一つに限定するために //footer タグで範囲を絞っています。

注意点

XPathは便利ですが、書き方が複雑になりやすい特徴があります。特に、HTML構造に強く依存している場合、画面デザインの変更によって動かなくなることもあります。

そのため、実際の現場では:

  • まずCSSセレクタを試す
  • 難しい場合はXPathを使う

という使い分けもよく行われています。

終わりに

XPathは触ったことがなかったので、最初難しく感じましたが、何回か練習するうちにだんだんわかるようになってきました!クイズなどAIに頼んで予習や復習するのもいいでしょう。

次回は、実際に簡単なテスト用ページを作成しながら、Katalonを触ってみたいと思います。少しずつ実際の操作にも触れていく予定なので、興味がある方はぜひ次回も見ていただけると嬉しいです!

タイトルとURLをコピーしました