awesome-copilot/instructions/playwright-python.instructions_ja.md

62 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: '公式ドキュメントに基づくPlaywright Python AIテスト生成指針。'
applyTo: '**'
---
# 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`を優先する。
## 例
```python
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()
```
## テスト実行戦略
1. **実行**: pytestコマンドを使用してターミナルからテストを実行する。
2. **失敗デバッグ**: テスト失敗を分析し根本原因を特定する