webapp-testing について
Python PlaywrightのスクリプトでローカルのWebアプリをテストするスキルです。静的ページや動的アプリを確認する開発者向けで、ブラウザー操作の前にページ状態と補助スクリプトを調べます。
主な機能
- 01Python Playwrightによるテスト作成
- 02静的ページと動的アプリへの対応
- 03補助スクリプトによる複数サーバー管理
- 04ページ状態を待ってから操作
- 05DOMの確認とアサーション
活用シーン
- 01ローカルWebアプリの動作確認
- 02フロントエンドとバックエンドを起動してブラウザーテスト
- 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()
調査してから操作するパターン
-
レンダリングされた DOM を確認します:
page.screenshot(path='APPROVED_PRIVATE_ARTIFACT_DIR/inspect.png', full_page=True) content = page.content() page.locator('button').all() -
確認結果からセレクターを特定します
-
特定したセレクターを使って操作を実行します
よくある落とし穴
実際のアプリケーションの状態を確認するには、ロケーターのアサーションを使用してください。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 の確認に合格しても、機能、アクセシビリティ、セキュリティのテストを網羅したことにはなりません。実施した操作とアサーション、失敗、未テストの経路を正確に報告してください。