Seleniumとは?特徴や自動テストの始め方、注意点を解説
Selenium(セレニウム)は、Webブラウザの操作を自動化するオープンソースツールです。無料で使えてPython・Javaなど多くの言語に対応しており、テスト自動化の定番として広く使われています。本記事では、3つの構成要素の違いやメリット・デメリット、Pythonを使った導入手順まで、初心者にもわかりやすく解説します。
目次
Selenium(セレニウム)とは
Selenium(セレニウム)は、Webブラウザの操作を自動化するためのオープンソースフレームワークです。Seleniumの用途はシンプルで、公式サイトでも「Selenium automates browsers. That's it!(Seleniumはブラウザを自動化します。それだけです!)」とシンプルに紹介されています。
主にWebアプリケーションのテスト自動化に使われていますが、それだけに限らず、定型的なブラウザ操作の自動化など、さまざまな用途に活用できます。
なお、「Selenium」と単に言った場合、後述する「Selenium WebDriver」のことを指していることが多いです。本記事でも、特に断りがない限りSelenium WebDriverを中心に解説します。
Seleniumの特徴
Seleniumには以下のような特徴があります。
- オープンソースで無料:Apache License 2.0のもとで公開されており、商用利用も含めて無料で使用できます
- 多言語対応: Python、Java、JavaScript、C#、Ruby、Kotlinなど、主要なプログラミング言語をサポートしています
- クロスブラウザ対応:Chrome、Firefox、Edge、Safariなど、主要なブラウザで動作します
- クロスプラットフォーム:Windows、macOS、Linuxのいずれでも利用可能です
- W3C WebDriver標準に準拠:ブラウザベンダーが公式にサポートする標準仕様に基づいています
Seleniumが活用される場面
Seleniumは主に以下のような場面で活用されています。
- Webアプリケーションのテスト自動化:E2Eテスト(エンドツーエンドテスト)やリグレッションテストの自動化に広く使われています
- Webスクレイピング:JavaScriptで動的に生成されるコンテンツの取得など、静的なスクレイピングでは対応できないケースで活用されています
- 定型的なブラウザ操作の自動化:フォーム入力やデータ登録など、繰り返し発生する作業の効率化に利用されています
Seleniumの構成要素
これだけ多様な場面で使われているSeleniumですが、実はSeleniumは単一のツールではなく、複数のコンポーネントで構成されています。用途や目的に応じて、適切なコンポーネントを選択して使用します。
Seleniumの歴史や各コンポーネントの詳しい関係性については、「Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか」で詳しく解説しています。
Selenium IDE
Selenium IDEは、Chrome、Firefox、Edge向けに提供されている、Webサイトの操作を記録・再生できるブラウザ拡張機能です。
ブラウザ上での操作を記録(レコード)し、それを再生(プレイバック)することでテストを実行できます。プログラミングの知識がなくてもテストを作成できるため、テスト自動化の入門や、簡易的なテストの作成に適しています。
ただし、複雑なテストシナリオや条件分岐を含むテストをIDEだけで作成するには限界があります。本格的なテスト自動化に取り組む場合は、後述するSelenium WebDriverの活用が必要になってきます。
その橋渡しとして、Selenium IDEには記録したテスト手順をSelenium WebDriver用のコードとしてエクスポートする機能があります。出力形式はJUnit、JavaScript Mocha、Python pytestに対応しています。まずIDEで操作を記録し、出力したコードをベースにWebDriverで編集・調整を加えていく、という流れでテスト開発を進めることも可能です。
Selenium WebDriver
Selenium WebDriverは、プログラミング言語からブラウザを直接制御するためのAPIです。Seleniumの中核となるコンポーネントで、本格的なテスト自動化において最も広く使われています。
各プログラミング言語向けのライブラリ(バインディング)が提供されており、Python、Java、C#などの言語でテストスクリプトを記述できます。ブラウザドライバー(ChromeDriver、GeckoDriverなど)を介してブラウザを操作する仕組みになっています。
条件分岐やループ、外部データの読み込みなど、プログラミングの機能をフルに活用した柔軟なテストシナリオを実装できます。
Selenium Grid
Selenium Gridは、複数のマシンやブラウザでテストを並列実行するためのコンポーネントです。
Hub(中央管理サーバー)とNode(テスト実行環境)という構成で動作し、多数のテストを複数の環境に分散して実行できます。これにより、テスト実行時間の大幅な短縮や、さまざまなブラウザ・OS環境での横断的なテストが可能になります。
大規模なテストスイートを運用するチームや、クロスブラウザテストを効率化したい場合に有効です。
Seleniumのメリット
Seleniumの構成要素がわかったところで、次はSeleniumを選ぶ理由を見ていきましょう。Seleniumには、テスト自動化ツールとして選ばれ続けてきた理由がいくつかあります。ここでは、主なメリットを3つ紹介します。
無料で導入できる
SeleniumはApache License 2.0のオープンソースソフトウェアであり、ライセンス費用がかかりません。商用利用も無料で可能なため、コストを抑えてテスト自動化を始められます。
小規模なチームやスタートアップ企業でも導入しやすく、まずは試してみるというアプローチが取りやすいのが魅力です。
様々なプログラミング言語・プラットフォームに対応
Seleniumは、Python、Java、C#、Ruby、JavaScript、Kotlinなど、多くのプログラミング言語に対応しています。チームがすでに使い慣れている言語でテストを書けるため、新たに言語を習得する必要がありません。
また、Windows、macOS、Linuxといった主要なOSで動作し、Chrome、Firefox、Edge、Safariなど主要なブラウザをサポートしています。多様な技術スタックを持つ組織でも柔軟に導入できます。
豊富なコミュニティと情報量
Seleniumは2004年に誕生し、20年以上の歴史があります。世界中で広く使われており、コミュニティが非常に活発です。
Stack Overflowなどで多くの質問と回答が蓄積されており、問題が発生したときに解決策を見つけやすい環境が整っています。日本語の情報も豊富で、書籍やブログ記事、チュートリアルなど、学習リソースに困ることは少ないでしょう。
Seleniumのデメリット
Seleniumを活用する際のメリットがある一方で、導入・運用時に考慮しておきたい点もあります。ここでは、主なデメリットを3つ紹介します。なお、ここで挙げる内容の中には、コーディングを伴うテスト自動化ツール全般、あるいはUIテスト自動化全般に共通するものもあります。
プログラミングスキルが必要
Selenium WebDriverを使う場合、プログラミングの知識が前提となります。Python、Javaなどの基本的な文法を理解している必要があります。
また、環境構築(Pythonのインストール、ライブラリの導入など)にもある程度の技術的な知識が求められます。
これはSeleniumに限らず、コーディングを伴うテスト自動化ツール(Playwright、Cypressなど)に共通する点です。プログラミングなしでテスト自動化を始めたい場合は、MagicPodのようなノーコードツールの検討も選択肢になります。
テストコードが属人化しやすい
テストコードの品質は、作成者のプログラミングスキルに大きく依存します。
適切な設計やコーディング規約がないままテストを作成すると、担当者以外がメンテナンスしにくいコードになりがちです。また、テストコードのドキュメント化が疎かになると、担当者が変わったときに保守が困難になるリスクがあります。
これもコーディングを伴うテスト自動化全般に共通する課題です。チームで運用する場合は、コーディング規約の整備やコードレビューの実施など、属人化を防ぐための工夫が重要になります。
UI変更の影響を受けやすい
Seleniumのテストは、HTMLの要素を特定して操作します。そのため、Webページのデザインや構造が変更されると、テストが失敗することがあります。
特に、要素を特定するためのセレクタ(ID、クラス名、XPathなど)が変更された場合は、テストコードの修正が必要になります。継続的なメンテナンスコストが発生することを考慮しておく必要があります。
これはUIテスト自動化全般に共通する課題であり、Seleniumだけでなく他のブラウザ自動化ツールでも同様です。安定したセレクタの選択や、Page Object Modelなどのデザインパターンを採用することで、メンテナンス性を向上させることができます。
Selenium WebDriverの仕組み
Seleniumのデメリットを把握したところで、次はSelenium WebDriverの仕組みを見ていきましょう。仕組みを理解しておくと、環境構築やトラブルシューティングの際に役立ちます。
ブラウザドライバーの役割
Selenium WebDriverでブラウザを操作する際、テストコードがブラウザを直接制御しているわけではありません。間に「ブラウザドライバー」と呼ばれるプログラムが介在しています。
ブラウザドライバーは、各ブラウザベンダーが公式に開発・提供しています。
- Chrome:ChromeDriver(Google)
- Firefox:GeckoDriver(Mozilla)
- Edge:Microsoft Edge WebDriver(Microsoft)
- Safari:SafariDriver(Apple)
これらのドライバーは、Selenium WebDriverからの命令を受け取り、対応するブラウザを実際に操作します。ブラウザベンダー自身が開発しているため、ブラウザの内部APIに直接アクセスでき、安定した自動化が可能になっています。
言語バインディングとHTTP通信
Selenium WebDriverは、Python、Java、JavaScriptなど、さまざまなプログラミング言語から利用できます。これを実現しているのが「言語バインディング」と呼ばれるライブラリです。
テストコードを実行すると、言語バインディングはブラウザドライバーに対してHTTPリクエストを送信します。ブラウザドライバーはそのリクエストを解釈してブラウザを操作し、結果をHTTPレスポンスとして返します。
このHTTP通信はW3C WebDriver仕様として標準化されており、どの言語バインディングを使っても同じ形式でドライバーと通信します。そのため、テストを書く言語が変わっても、ブラウザの操作方法は共通です。
Selenium Managerの登場
従来、Selenium WebDriverを使うには、ブラウザのバージョンに合ったドライバーを手動でダウンロードし、パスを設定する必要がありました。ブラウザがアップデートされるたびにドライバーも更新する必要があり、この作業が初心者にとってハードルになっていました。
Selenium 4.6以降では「Selenium Manager」という機能が導入され、この問題が大幅に改善されています。Selenium Managerは、実行環境のブラウザバージョンを自動的に検出し、適切なドライバーをダウンロード・設定してくれます。
これにより、多くの場合は言語ごとのSeleniumのライブラリをインストールするだけで、すぐにテストを実行できるようになりました。
Selenium WebDriverを使った自動テストの始め方【Python編】
それでは実際に、Selenium WebDriverを導入してみましょう。ここでは、Pythonを使って環境を構築し、最初のテストを実行するまでの手順をご紹介します。
必要なもの
Selenium WebDriverでテストを実行するには、以下のものが必要です。
- Python:自動テストを書くためのプログラミング言語
- Seleniumライブラリ:PythonからWebDriverを操作するための言語バインディング
- ブラウザ:Chrome、Firefox、Edgeなど、自動化したいブラウザ
- ブラウザドライバー:ブラウザを操作するためのプログラム(前述のとおり、Selenium 4.6以降はSelenium Managerが自動で管理してくれます)
また、実際のプロジェクトでは、ユニットテストフレームワークと組み合わせて使うことが多いです。Pythonではpytestがよく使われます。テストフレームワークを使うことで、テストの実行管理、アサーション(検証)、レポート出力などが効率的に行えます。本記事でも、pytestを使ったテストの書き方を紹介します。
環境構築
まず、以下の準備を行います。
- Pythonのインストール:Python公式サイトから最新版をダウンロードしてインストールします。
- Seleniumライブラリのインストール:コマンドプロンプト(またはターミナル)で以下のコマンドを実行します。
pip install selenium
- ブラウザの準備:Google Chromeを使用する場合は、最新版がインストールされていることを確認します。
WebDriverの設定
前述のとおり、Selenium 4.6以降ではSelenium Managerによりブラウザドライバーが自動的に管理されます。そのため、特別な設定をしなくても、Seleniumライブラリをインストールするだけでテストを実行できます。
Selenium Managerは、実行時にブラウザのバージョンを検出し、適切なドライバーを自動でダウンロードしてくれます。ブラウザがアップデートされた場合も、次回実行時に対応するドライバーが取得されるため、手動での管理は不要です。
最初のテストスクリプト
以下は、pytestと組み合わせてホテル予約サイトのテストを行うスクリプトの例です。「宿泊予約」ボタンをクリックして、宿泊プラン一覧画面に遷移することを確認します。
まず、pytestをインストールします。
pip install pytest
次に、以下のコードをtest_hotel.pyというファイル名で保存します。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_hotel_reservation_navigation():
"""ホテル予約サイトで宿泊予約ボタンをクリックし、宿泊プラン一覧画面に遷移することをテストする"""
# ブラウザを起動
options = Options()
driver = webdriver.Chrome(options=options)
try:
# ホテル予約サイトにアクセス
driver.get("https://hotel-example-site.takeyaqa.dev/ja/index.html")
# ページが読み込まれるまで待機
wait = WebDriverWait(driver, 10)
# 宿泊予約ボタンをクリック
stay_button = wait.until(
EC.element_to_be_clickable((By.LINK_TEXT, "宿泊予約"))
)
stay_button.click()
# 画面遷移を待つ
wait.until(
EC.presence_of_element_located((By.TAG_NAME, "h1"))
)
page_title = driver.find_element(By.TAG_NAME, "h1").text
print(f"ページタイトル: {page_title}")
# 現在のURLを出力
print(f"現在のURL: {driver.current_url}")
# アサート:URLに "plan" が含まれていることを確認
assert "plan" in driver.current_url.lower() or "reservation" in driver.current_url.lower(), \
f"期待したURLに到達していません。現在のURL: {driver.current_url}"
print("✓ 宿泊プラン一覧画面への遷移が確認されました")
finally:
# ブラウザとプロセスを閉じる
driver.quit()
このスクリプトでは、以下のポイントを押さえています。
- WebDriverWait と expected_conditions:要素が操作可能になるまで最大10秒間待機します。これが前述した「Explicit Wait(明示的待機)」です
- By.LINK_TEXT:リンクテキスト「宿泊予約」で要素を特定しています(セマンティックロケーターの一例)
- assert文:pytestでは、
assert文を使ってテストの成否を判定します - try-finally:テストの成否にかかわらず、最後に必ずブラウザを閉じます
以下のコマンドでテストを実行します。
pytest test_hotel.py -v
テストが成功すると、以下のような結果が表示されます。
============================= test session starts ==============================
collected 1 item
test_hotel.py::test_hotel_reservation_navigation PASSED [100%]
============================== 1 passed in 5.23s ===============================
Chromeブラウザが自動的に起動し、ホテル予約サイトにアクセスして「宿泊予約」ボタンをクリックする様子が確認できます。
Seleniumを使う際の注意点
導入手順がわかったところで、実際にSeleniumを使う際に知っておきたいポイントを紹介します。
待機処理を適切に実装する
Webページの読み込みや要素の表示には時間がかかることがあります。time.sleep()で固定時間待機する方法もありますが、テストの実行時間が無駄に長くなったり、環境によって失敗したりする原因になります。
代わりに、Explicit Wait(明示的待機)を使って、特定の条件が満たされるまで待機する方法が推奨されています。
要素の特定方法(ロケーター)を検討する
Seleniumでは、操作したい要素を特定するためにさまざまな方法(ロケーター)を使用できます。代表的なものとして、ID、Name、CSSセレクタ、XPathなどがあります。
ロケーターの選び方については、いくつかの考え方があります。
一つは「ID優先」のアプローチです。IDは一意であることが期待され、変更されにくいため、安定したテストを書きやすいとされています。一般的には、ID > Name > CSSセレクタ > XPath の順で優先するという指針が示されることがあります。
もう一つは「セマンティックロケーター」を重視するアプローチです。これは、ユーザーが実際に認識する要素(ボタンのラベル、リンクのテキストなど)をもとに要素を特定する方法です。By.LINK_TEXTやBy.PARTIAL_LINK_TEXT、あるいはアクセシビリティ属性(aria-labelなど)を活用します。この方法は、ユーザーの視点に近いテストが書けるという利点があります。
どちらが正しいというものではなく、プロジェクトの方針やチームの考え方によって選択が分かれます。重要なのは、チーム内でロケーターの選び方に関する方針を決めて統一することです。一貫性のあるルールを設けることで、テストコードの可読性とメンテナンス性が向上します。
テストを疎結合にする
各テストケースは、他のテストの結果に依存しないように設計します。テストの実行順序が変わっても同じ結果が得られるようにすることで、安定したテストスイートを維持できます。
Seleniumの今後・発展的な機能
Seleniumは現在も活発に開発が続けられており、2026年1月にはバージョン4.40がリリースされています。ここでは、今後注目される機能としてWebDriver BiDiを紹介します。
WebDriver BiDiとは
WebDriver BiDiは、W3Cで標準化が進められている新しいプロトコルです。
従来のWebDriverは、テストコードからブラウザへの一方向の通信(HTTPリクエスト/レスポンス)でした。WebDriver BiDiでは、WebSocketを使った双方向通信が可能になり、ブラウザからのイベントをリアルタイムで受け取れるようになります。
これにより、以下のようなことが可能になります。
- ネットワークリクエストの傍受や変更
- コンソールログのリアルタイム取得
- JavaScriptエラーの即時検知
Chrome DevTools Protocol(CDP)に似た機能ですが、WebDriver BiDiはW3C標準として策定されているため、Chrome以外のブラウザでも同じAPIで利用できる点が特徴です。
Selenium 4.1.2以降でWebDriver BiDiのサポートが始まっており、今後さらに機能が拡充される予定です。詳しくは公式ドキュメントのBiDiページを参照してください。
まとめ
本記事では、Seleniumの基本的な特徴から構成要素、メリット・デメリット、導入手順までを体系的に解説しました。Seleniumは、無料で利用でき、プログラミングスキルを活かして柔軟なテスト自動化を実現できるツールです。一方で、テストコードの保守や一定の開発スキルが求められる点については、導入前に十分な検討が必要です。
「プログラミングなしでテスト自動化を始めたい」「メンテナンスコストを抑えたい」という場合には、ノーコード型のテスト自動化ツールも有力な選択肢となります。MagicPodもその一つとして、Seleniumと比較しながら自社に適したツールを検討してみてください。