3.8 KiB
3.8 KiB
| description | applyTo |
|---|---|
| 公式ドキュメントに基づくPlaywright Python AIテスト生成指針。 | ** |
Playwright Pythonテスト生成指針
テスト作成ガイドライン
コード品質標準
- ロケータ: 復元性とアクセシビリティのため、ユーザー向けのロールベースロケータ(get_by_role、get_by_label、get_by_text)を優先する。
- アサーション: expect API経由で自動再試行するweb-firstアサーションを使用する(例:expect(page).to_have_title(...))。特に要素の可視性変化をテストする場合でない限り、より具体的なアサーションがより信頼性が高いため、expect(locator).to_be_visible()を避ける。
- タイムアウト: Playwrightの組み込み自動待機メカニズムに依存する。ハードコードされた待機や増加したデフォルトタイムアウトを避ける。
- 明確性: 意図を明確に示す説明的なテストタイトル(例:def test_navigation_link_works():)を使用する。「ボタンをクリック」のような単純な動作を説明するためではなく、複雑なロジックを説明するためだけにコメントを追加する。
テスト構造
- インポート: すべてのテストファイルは
from playwright.sync_api import Page, expectで始める。 - フィクスチャ: ブラウザページと対話するため、テスト関数の引数として
page: Pageフィクスチャを使用する。 - セットアップ: 各テスト関数の始めに
page.goto()のようなナビゲーションステップを配置する。複数のテストで共有されるセットアップアクションには、標準のPytestフィクスチャを使用する。
ファイル構成
- 場所: 専用のtests/ディレクトリにテストファイルを保存するか、既存のプロジェクト構造に従う。
- 命名: Pytestによって発見されるため、テストファイルは
test_<feature-or-page>.py命名規則に従う必要がある。 - 範囲: 主要なアプリケーション機能やページごとに1つのテストファイルを目指す。
アサーションのベストプラクティス
- 要素数: ロケータによって見つかった要素数をアサートするには
expect(locator).to_have_count()を使用する。 - テキスト内容: 正確なテキスト一致には
expect(locator).to_have_text()を使用し、部分一致にはexpect(locator).to_contain_text()を使用する。 - ナビゲーション: ページURLを確認するには
expect(page).to_have_url()を使用する。 - アサーションスタイル: より信頼性の高いUIテストのため、
assertよりもexpectを優先する。
例
import re
import pytest
from playwright.sync_api import Page, expect
@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):
# 各テスト前に開始URLに移動する。
page.goto("https://playwright.dev/")
def test_main_navigation(page: Page):
expect(page).to_have_url("https://playwright.dev/")
def test_has_title(page: Page):
# タイトルが部分文字列を「含む」ことを期待する。
expect(page).to_have_title(re.compile("Playwright"))
def test_get_started_link(page: Page):
page.get_by_role("link", name="Get started").click()
# ページにInstallationという名前の見出しがあることを期待する。
expect(page.get_by_role("heading", name="Installation")).to_be_visible()
テスト実行戦略
- 実行: pytestコマンドを使用してターミナルからテストを実行する。
- 失敗デバッグ: テスト失敗を分析し根本原因を特定する