【Python/LangGraph】Playwrightの壊れたテストをAIが自律修復するオープンソースを作ってみた(コントリビューター募集中!)
1. はじめに:E2Eテスト運用における「最大の苦痛」
フロントエンドの開発が進むにつれ、UIの要素名、ID、DOM構造が頻繁に変更されます。その結果、本質的なロジックのバグではない**「セレクタの破損」によるE2Eテスト(Playwright)の落ち**が多発し、メンテナンスコストが跳ね上がる経験は誰しもあるかと思います。
この課題を根本的に解決するため、LLMの自律的なリトライループを活用し、壊れたセレクタや待機条件を自動で診断・修正・検証まで行うCLIツール/GitHub Action E2E-Self-Heal を開発しました。
現在コアロジックを実装したばかりの**初期段階(Work in Progress)**であり、グローバルな開発者コミュニティと一緒にプロジェクトを成長させたいと考えています!
- Repository: Lee-Dongwook/E2E-Self-Heal
2. コア思想:アサーションには絶対に触れない「ガードレール」
AIにテストコードの修正を任せる際、最も恐ろしいのは**「テストロジックやアサーション(expect())まで勝手に書き換えられ、本来検知すべきバグをパスさせてしまうこと」**です。
このプロジェクトでは厳格なスコープのガードレールを設けています。
-
修正対象: 失敗した
locatorと待機条件のみ。 -
絶対非対象: アサーション(
expect)やテスト自体の実行フロー。
AIの推論を完全に制御し、人間が安心してレビューできるパッチ(git diff)のみを生成します。
3. 修復の裏側:5つのレイヤーと LangGraph による自律ループ
単にLLMにエラーログを投げてコードを生成させるだけでは、高確率で「存在しないセレクタ」を出力する**幻覚(Hallucination)**が発生します。これを防ぐため、内部は以下の5つのコンポーネントが状態を共有しながらループ(LangGraph)する構造になっています。
- CLI Core: すべてのエントリポイント。ローカル環境でもCI環境でも同一のロジックで動作します。
-
Preprocessor(データ前処理): 生のPlaywrightログと
git diffから、ノイズを極限まで削ぎ落とした「失敗セレクタ+変更されたDOM属性」のコンテキストを抽出。 -
LangGraph エージェント:
Diagnoser → Patch Generator → Selector Verifier → Test Runnerを条件付きRouterで繋ぎ、テストが成功するか上限に達するまで自律リトライ。 - Selector Verifier(実DOM検証): パッチされた新セレクタが、実際のWebページのDOM上で**「ちょうど1つの要素」**にマッチするかを事前に検証(Node/Playwrightヘルパー)。0件、または2件以上ヒットした場合は、フルテストを実行する前に即座にリジェクトして再パッチへ戻します。
-
Test Runner: 検証をパスしたコードに対し、実際に
npx playwright testを動かして最終確認。
4. 🛠️ 現在募集中のロードマップとIssue(オープンソース貢献歓迎!)
プロジェクトはまだ未完成であり、これから実装していくエキサイティングなJira/GitHubエピック級のタスクがたくさんあります。Python、AIエージェント、QA自動化に興味がある方の参画を待っています!
🚀 直近で拡張予定の機能
- Static Pre-Filtering (軽量な事前フィルタリング): 軽微なタイポや単純な構造変更は、LLMを呼ばずにローカルのツリーマッチングアルゴリズムで0.1秒で高速修復(コスト削減)。
-
AST-based Mutation Lock (AST構文解析ガード):
tree-sitter等を用い、AIが万が一アサーションを変更しようとした場合はコードレベルで強制拒否する絶対的なセキュリティガード。 - Enterprise Notifications (通知・起票自動化): 修復サマリーを Slack, Jira, Linear などのIssueトラッカーとシームレスに連動し、チケットを自動起票・更新するプラグイン。
5. さいごに
このプロジェクトは現在、NVIDIA NIM(openai/gpt-oss-120b等)の強力な構造化出力(Structured Outputs)を活用してエンドツーエンドの検証を行っています。
「ドキュメントの修正/翻訳」「バグ報告」「新規機能の提案」など、どんな小さな貢献でも大歓迎です(good first issue も順次作成していきます)。
リポジトリへのスター(⭐)やウォッチ、Issueでの議論など、皆様のフィードバックをお待ちしております!