BLOG

ブログ

2025/08/11 技術系

PlaywrightでWebアプリを自動テスト!

この記事を書いた人 T.U

こんにちは、T.Uです。
今回はPlaywrightでWebアプリを自動テストする流れを紹介します。

Playwrightとは?

Playwrightは、Microsoftによって開発された、オープンソースのエンドツーエンド(E2E)テスト自動化ツールです。
Chromium、WebKit、Firefoxをサポートし、ヘッドレステストにも対応しています。

また、Python、Node.js、Java、.NETなどの複数の言語に対応しているため、慣れた言語で利用できるのも大きな利点です。
自動テストだけでなく、Webスクレイピングにも利用することができます。

本記事の前提

この記事では、以下の環境を使用しています。

  • Python 3.9
  • macOS Sequoia
  • localhostでWebアプリが起動済み

セットアップ

まずは、Playwrightをセットアップします。

pip install pytest-playwright

次に、必要なブラウザをインストールします。

playwright install

インストールが完了したら、テストファイルを作成します。
ファイルは、 test_ で始まるようにすることで、pytestがテストファイルだと認識します。

今回は、test_top.py を作成します。

import re
from playwright.sync_api import Page, expect

def test_top(page: Page):
    # localhostを開く
    page.goto("http://localhost")

    # ページタイトルに「Hello World」が含まれるかチェックする
    expect(page).to_have_title(re.compile("Hello World"))

以下のコマンドを実行します。
--headed オプションを指定すると、実際にブラウザが起動して動作を確認できます。

pytest --headed

テスト結果が表示され、成功件数が確認できます。

また、テストに失敗した場合は、どこで失敗したかが詳細に表示されます。

テスト対象のアプリ

今回は、以下のようなログインフォームをテストします。

<form id="login-form" method="post">
    <input
            type="text"
            id="username"
            class="username"
            name="username"
            placeholder="ユーザー名"
            data-testid="input-username"
    >
    <input
            type="password"
            id="password"
            class="password"
            name="password"
            placeholder="パスワード"
            data-testid="input-password"
    >
    <button
            type="submit"
            id="login-button"
            data-testid="button-login"
    >
        ログイン
    </button>
</form>

ログインが完了すると、以下のようなHTMLが表示されます。

<h1>こんにちは、テストユーザーさん。</h1>

要素の指定方法

Playwrightでは、さまざまな方法でDOM要素を特定できます。
また、自動的に要素が表示可能な状態になるまで待機してくれるため、安定したテストが可能です。

詳細は公式ドキュメントをご参照ください。

locator()で要素を特定する

# IDで特定
page.locator("#username")
# classで特定
page.locator(".username")
# XPathで特定
page.locator("xpath=//*[@id='username']")

テキストから要素を特定

page.get_by_text("ようこそ")

data-testid属性から要素を特定

page.get_by_test_id("input-username")

要素に入力

page.locator("#username").fill("user")

要素をクリック

page.locator("#button").click()

ログイン機能をテスト

次に、ログイン機能の自動テストを実装してみましょう。
test_login.py を作成し、以下のように記述します。

from playwright.sync_api import Page, expect

def test_login(page: Page):
    # ログインページにアクセス
    page.goto("http://localhost/login")

    # ユーザー名とパスワードを入力
    page.locator("#username").fill("admin")
    page.locator("#password").fill("password")

    # ログインボタンをクリック
    page.locator("#login-button").click()

    # 「こんにちは、テストユーザーさん。」が表示されるかチェック
    expect(page.get_by_text("こんにちは、テストユーザーさん。")).to_be_visible()

実行すると、ブラウザが起動して自動でテストが行われます。

もちろん、ユーザー名やパスワードが間違っている場合は、テストに失敗します。

まとめ

今回は、Playwrightでログイン機能を自動テストする方法を紹介しました。
自動化テストを導入することで、開発の品質と効率が大きく向上します。

また、Playwrightには他にも以下のような便利な機能があります。

  • スクリーンショットの撮影
  • 操作を記録してコードを自動生成
  • CI/CDとの統合(GitHub ActionsやGitLab CIなど)


株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ