0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SeleniumでXPathを使う方法:例付き完全ガイド

Posted at

SeleniumはWebアプリケーションの自動テストにおいて広く使われているツールですが、その中でもXPathは非常に重要な役割を果たします。XPathを理解し正しく使うことで、複雑なDOM構造の中からターゲットの要素を正確に取得できるようになります。

本記事では、XPathの基本からSeleniumでの実用的な使い方まで、例を交えながら詳しく解説します。

目次

  1. XPathとは?

  2. XPathの基本構文

  3. 絶対パスと相対パスの違い

  4. XPathの演算子と関数

  5. SeleniumでXPathを使う方法

  6. よくあるXPathの使い方パターン

  7. トラブルシューティング

  8. まとめ

XPathとは?

XPath(XML Path Language)は、XMLやHTMLドキュメント内の要素を検索・選択するための言語です。Seleniumでは、XPathを使って要素を特定し、自動操作を行うことができます。

たとえば、以下のようなHTMLがあったとします:

  • リンゴ
  • バナナ
  • オレンジ

この中の「バナナ」要素をXPathで指定するには:

//li[text()="バナナ"]

XPathの基本構文

XPathには主に以下のような構文があります:

構文 説明
//tagname 指定したタグ名の要素を全体から取得
//div[@id='main'] 属性が一致する要素を取得
//input[@type='text'] type属性が"text"のinput要素
//ul/li[2] 2番目のli要素
//a[contains(text(), 'ログイン')] テキストに「ログイン」を含むa要素

絶対パスと相対パスの違い

絶対パス:HTMLのルートから特定の要素までの完全なパス

/html/body/div/ul/li[2]
相対パス://から始まり、どこにあっても一致する要素を対象にできる柔軟な方法

//li[2]
ヒント:自動テストでは相対パスの使用が推奨されます。ページ構造の変更に柔軟に対応できるからです。

XPathの演算子と関数

XPathはさまざまな演算子や関数をサポートしています:

演算子/関数 例 説明
text() //p[text()='ようこそ'] テキストが一致する要素
contains() //a[contains(text(), '詳細')] テキストに一部一致する
starts-with() //input[starts-with(@id, 'user')] IDが"user"で始まるinput
and / or //input[@type='text' and @name='username'] 複数条件の指定

SeleniumでXPathを使う方法

PythonとSeleniumを使ってXPathを活用する方法を見ていきましょう。
必要なライブラリのインストール bash

pip install selenium
簡単なスクリプト例

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

XPathを使って要素を取得

element = driver.find_element(By.XPATH, "//h1[text()='Example Domain']")
print(element.text)

driver.quit() このスクリプトでは、XPathでタグの中に"Example Domain"というテキストを持つ要素を取得しています。

よくあるXPathの使い方パターン

1. ボタンをクリックする

driver.find_element(By.XPATH, "//button[@id='submit']").click()

2. 入力フィールドに文字を入力

driver.find_element(By.XPATH, "//input[@name='email']").send_keys("test@example.com")

3. リストの中の特定の要素を選ぶ

driver.find_element(By.XPATH, "//ul/li[3]").click()

4. クラス名に一部一致

class名に"active"が含まれているdiv
driver.find_element(By.XPATH, "//div[contains(@class, 'active')]")

トラブルシューティング

XPathを使用する際、以下のような問題がよく発生します:

要素が見つからない

ページの読み込みが完了していない

XPathの指定が間違っている

フレーム内に要素がある

対策:

WebDriverWaitを使って要素の表示を待つ

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id='main']"))
)

まとめ

XPathはSeleniumで要素を操作する上で非常にパワフルな手段です。単純な要素取得から、複雑な条件付きの検索まで対応できるため、実践的なスクリプト作成には欠かせません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?