mcpField
W
webapp-testing

webapp-testing

github.com/sickn33テスト・品質48.7k719 回インストール今日更新
リポジトリ

webapp-testing について

Python PlaywrightのスクリプトでローカルのWebアプリをテストするスキルです。静的ページや動的アプリを確認する開発者向けで、ブラウザー操作の前にページ状態と補助スクリプトを調べます。

主な機能

  1. 01Python Playwrightによるテスト作成
  2. 02静的ページと動的アプリへの対応
  3. 03補助スクリプトによる複数サーバー管理
  4. 04ページ状態を待ってから操作
  5. 05DOMの確認とアサーション

活用シーン

  1. 01ローカルWebアプリの動作確認
  2. 02フロントエンドとバックエンドを起動してブラウザーテスト
  3. 03ページ要素を調べてセレクターを特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill webapp-testing

インストール後、Claude Code で/webapp-testingを入力して読み込まれたか確認します。

同梱ファイルLICENSE.txtscripts/with_server.py

詳細

Web アプリケーションのテスト

カタログを変更しました:ソースを先に確認する方針と状態ベースの待機を追加し、サーバーヘルパーの制限とクリーンアップを更新しました。

ローカルの Web アプリケーションをテストするには、ネイティブの Python Playwright スクリプトを作成します。

利用可能なヘルパースクリプト:

  • scripts/with_server.py - サーバーのライフサイクルを管理します(複数のサーバーに対応)

実行前に、ヘルパーのソース、プロジェクトのスクリプト、ライフサイクルフックを確認してください。 --help の使用も、確認後に行ってください。ヘルプの表示もコードの実行にあたります。これらのヘルパーは作業を補助するものであり、実行サンドボックスではありません。

アプローチの選択:判断ツリー

User task → Is it static HTML?
    ├─ Yes → Read HTML file directly to identify selectors
    │         ├─ Success → Write Playwright script using selectors
    │         └─ Fails/Incomplete → Treat as dynamic (below)
    │
    └─ No (dynamic webapp) → Is the server already running?
        ├─ No → Run: python scripts/with_server.py --help
        │        Then use the helper + write simplified Playwright script
        │
        └─ Yes → Reconnaissance-then-action:
            1. Navigate and wait for a specific visible application-ready condition
            2. Take screenshot or inspect DOM
            3. Identify selectors from rendered state
            4. Execute actions with discovered selectors

例:with_server.py の使用

サーバーを起動するには、まず --help を実行し、その後ヘルパーを使用します。

単一のサーバー:

python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py

複数のサーバー(例:バックエンド+フロントエンド):

python scripts/with_server.py \
  --server "cd backend && python server.py" --port 3000 \
  --server "cd frontend && npm run dev" --port 5173 \
  -- python your_automation.py

自動化スクリプトを作成する場合は、Playwright のロジックのみを記述します(サーバーは自動的に管理されます)。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True) # Always launch chromium in headless mode
    page = browser.new_page()
    page.goto('http://localhost:5173') # Server already running and ready
    page.get_by_role('main').wait_for(state='visible') # replace with actual ready state
    # ... your automation logic
    browser.close()

調査してから操作するパターン

  1. レンダリングされた DOM を確認します:

    page.screenshot(path='APPROVED_PRIVATE_ARTIFACT_DIR/inspect.png', full_page=True)
    content = page.content()
    page.locator('button').all()
    
  2. 確認結果からセレクターを特定します

  3. 特定したセレクターを使って操作を実行します

よくある落とし穴

実際のアプリケーションの状態を確認するには、ロケーターのアサーションを使用してください。networkidle はポーリング中にハングすることがあり、ハイドレーションやビジネス上の準備が完了したことの証明にはなりません。

ベストプラクティス

  • 同梱スクリプトを使用する前に確認してください - タスクを達成するうえで、scripts/ にあるスクリプトが役立つか検討します。許可リストはセキュリティ境界ではありません。npm/node/python コマンドは、プロジェクトの任意のコードを実行できます。--help で使い方を確認してから、直接実行してください。
  • 同期スクリプトには sync_playwright() を使用します
  • 終了時には必ずブラウザーを閉じます
  • text=、role=、CSS セレクター、ID など、説明的なセレクターを使用します
  • page.wait_for_selector() や page.wait_for_timeout() など、適切な待機処理を追加します

参考ファイル

  • examples/ - よくあるパターンを示す例:
    • element_discovery.py - ページ上のボタン、リンク、入力欄を見つける
    • static_html_automation.py - ローカル HTML に file:// URL を使用する
    • console_logging.py - 自動化中にコンソールログを取得する

使用する場合

このスキルは、概要に記載されたワークフローや操作を実行する場合に適用できます。

制限事項

  • タスクが上記の範囲に明確に該当する場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、成功条件が不足している場合は、作業を中止して確認を求めてください。

サーバーとテストの境界

許可された隔離済みのテスト用データベース/アカウントを使用し、ローカル開発サーバーはループバックにバインドしてください。実行前にプロジェクトの起動/テストスクリプトを読みます。実行ファイル名や引数の確認だけでは、ネットワークアクセス、ライフサイクルスクリプト、任意の Python/JavaScript の実行を防げません。ヘルパーは既存のリスナーがある場合は起動を拒否し、待機時間に上限を設け、パイプのデッドロックを避けるためサーバーの標準出力/標準エラー出力を破棄します。ただし、TCP リスナーは準備完了の目安にすぎないため、想定した HTTP/ページであることを確認してください。POSIX では起動したプロセスグループがクリーンアップの対象となります。Windows では子プロセスツリーのクリーンアップは保証されないため、プロセスグループから離脱したプロセスは明示的にクリーンアップする必要があります。テストコマンドのタイムアウトが、子孫プロセスの終了を保証するわけではありません。スクリーンショットやログは承認済みの非公開パスに保存し、認証情報/PII をマスキングしてください。共有の /tmp ファイルを上書きしないでください。このインポートには参照先の examples ディレクトリが存在しないため、これらのスクリプトが同梱されていると主張しないでください。スクリーンショット/DOM の確認に合格しても、機能、アクセシビリティ、セキュリティのテストを網羅したことにはなりません。実施した操作とアサーション、失敗、未テストの経路を正確に報告してください。

コメント