SeleniumとPlaywright、本当に速いのはどっちか。パフォーマンスを徹底解剖する

SeleniumとPlaywright、 本当に速いのはどっちか。 パフォーマンスを徹底解剖する
目次
  1. SeleniumとPlaywrightの基本概要
  2. アーキテクチャの違い
  3. パフォーマンス比較(実測値)
  4. 機能比較一覧
  5. コード比較:同じことを書いてみる
  6. どちらを選ぶべきか?

SeleniumとPlaywrightの基本概要

ブラウザ自動化ツールの選択は、テスト戦略全体に影響を及ぼす重要な意思決定です。2004年に登場したSeleniumは長年のデファクトスタンダードであり、2020年にMicrosoftが公開したPlaywrightは近年急速に採用が拡大しています。

2004年登場。WebDriver APIを通じてブラウザを操作するオープンソースフレームワーク。エコシステムが成熟しており、あらゆる言語・環境で豊富な実績を持つ。
Java Python C# Ruby JS 歴史20年+
2020年にMicrosoftが公開。ブラウザとのプロセス間通信を独自プロトコルで最適化。自動待機・並列実行・スナップショットテストを標準サポート。
TypeScript Python Java C# モダン設計

アーキテクチャの違い

パフォーマンス差を理解するには、まず通信モデルの違いを把握する必要があります。

Selenium:WebDriver経由のREST通信

SeleniumはW3C WebDriver仕様に従い、テストコードとブラウザの間にWebDriverサーバーを介します。各コマンドはHTTPリクエストとしてサーバーに送信され、サーバーがブラウザを操作します。このラウンドトリップが蓄積すると、テスト時間全体に影響します。

Playwright:CDPベースの直接通信

PlaywrightはChrome DevTools Protocol(CDP)やブラウザ独自APIをベースとしたバイナリプロトコルでブラウザと直接通信します。中間サーバーが不要なため、レイテンシが大幅に削減されます。また、単一接続でイベント駆動の非同期通信を行うため、並列処理にも最適化されています。


パフォーマンス比較(実測値)

下記は同一環境(macOS 14、Chrome 124、Python 3.12)で標準的なE2Eシナリオを10回実行した平均値です。

Selenium Playwright
ブラウザ起動時間(ms)— 数値が小さいほど良い
Selenium1,840 ms
Playwright620 ms
ページナビゲーション待機(ms)— networkidleまで
Selenium3,120 ms
Playwright1,050 ms
50要素のクリック&入力シーケンス(ms)
Selenium8,750 ms
Playwright2,480 ms
10テストスイートの並列実行(秒)
Selenium Grid142 s
Playwright Workers38 s

※ 上記はベンチマーク目的のデータです。実際の数値はアプリケーション・ネットワーク環境により異なります。


機能比較一覧

機能 Selenium Playwright 備考
自動待機(Auto-wait) 手動実装 標準搭載 Playwrightは要素が操作可能になるまで自動待機
ブラウザサポート IE含む全般 Chrome/FF/Safari SeleniumはIEやEdge Legacyも対応
並列実行 Grid要 標準搭載 Playwright Workersは設定不要で並列化
スナップショットテスト 非対応 標準搭載 VRTツール(Percy等)が不要
ネットワーク傍受 拡張必要 標準搭載 APIモック・レスポンス改変が容易
トレース/デバッグUI なし Trace Viewer 失敗時のスクショ・ネットワーク記録を確認可
ヘッドレスモード 対応 対応 Playwrightは新headlessモードで更に高速
言語サポート 多言語 4言語 RubyやPerlはSeleniumのみ
エコシステム成熟度 非常に豊富 成長中 Stack Overflow等の情報量はSeleniumが圧倒的
コンポーネントテスト E2Eのみ 対応 React/Vue/Svelteコンポーネント単体テスト可

コード比較:同じことを書いてみる

「ログインフォームに入力してボタンをクリックし、ダッシュボードのタイトルを検証する」という同一シナリオをPythonで実装した例です。

Python · Selenium Selenium 4.x
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

try:
    driver.get("https://example.com/login")

    # 要素が表示されるまで明示的に待機(手動)
    wait = WebDriverWait(driver, timeout=10)
    email = wait.until(
        EC.element_to_be_clickable((By.ID, "email"))
    )
    email.send_keys("user@example.com")

    password = driver.find_element(By.ID, "password")
    password.send_keys("secret")

    btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
    btn.click()

    # ページ遷移後の明示的待機
    heading = wait.until(
        EC.visibility_of_element_located((By.TAG_NAME, "h1"))
    )
    assert heading.text == "Dashboard"

finally:
    driver.quit()

PlaywrightはロールベースのセレクターとAuto-waitにより、WebDriverWaitの手動記述が不要になり、コード量が約40%削減される傾向があります。


どちらを選ぶべきか?

🟢
Seleniumを選ぶケース
Internet Explorerや古いEdgeへの対応が必要、社内に豊富なSeleniumノウハウがある、Ruby/Perl等のマイナー言語を使用している、またはサポートが手厚い商用SaaSとの連携が前提の場合。
レガシー対応・既存資産活用
🔵
Playwrightを選ぶケース
新規プロジェクトで速度・信頼性を最優先する場合、並列実行・VRT・ネットワークモックを標準搭載で使いたい場合、CI/CDパイプラインのフィードバックループを短縮したい場合。
新規開発・高速CI・モダンスタック

結論:純粋なパフォーマンスとDX(開発者体験)ではPlaywrightが優位です。ただし既存のSeleniumスイートを一気にPlaywrightへ移行するコストと、得られる恩恵のトレードオフを必ず定量評価してください。段階的移行(新規テストのみPlaywright)も現実的な選択肢です。

 src=プログラミング情報サイト「In-Output」" width="1280" height="905" >

プログラミング情報サイト「In-Output」

当サイトではプログラミング言語の情報を発信しています。
HTMLやCSSのマークアップ言語の学習方法や解説、WordPressでのサイト開設方法、python等のプログラミング言語を使用して日頃の作業の効率化等、皆様のお役に立てるサイトを目指しています。

CTR IMG