vitest-midscene-e2e
MidsceneをVitestに統合し、Web(Playwright)・Android(ADB)・iOS(WDA)向けのAI駆動UIテストを実現します。自然言語によるUI操作を用いて、新規プロジェクトの雛形作成や既存プロジェクトの変換、E2Eテストの作成・更新・デバッグ・実行をサポートします。「write test」「run test」「e2e test」「convert project」などのキーワードで起動します。
description の原文を見る
Enhances Vitest with Midscene for AI-powered UI testing across Web (Playwright), Android (ADB), and iOS (WDA). Scaffolds new projects, converts existing projects, and creates/updates/debugs/runs E2E tests using natural-language UI interactions. Triggers: write test, add test, create test, update test, fix test, debug test, run test, e2e test, midscene test, new project, convert project, init project, 写测试, 加测试, 创建测试, 更新测试, 修复测试, 调试测试, 运行测试, 新建工程, 转化工程.
SKILL.md 本文
Vitest Midscene E2E
モジュール
| モジュール | 役割 |
|---|---|
| Vitest | TypeScript テストフレームワーク。テスト組織、アサーション、ライフサイクルのための describe/it/expect/hooks を提供します。 |
| Midscene | AI駆動型UI自動化。自然言語を通じてUI要素と相互作用します — 脆弱なセレクタは不要。コアAPI: aiAct。 |
対応プラットフォーム:
- Web —
WebTest(Playwright Chromium):ctx.agent+ctx.page - Android —
AndroidTest(ADB + scrcpy):ctx.agentのみ - iOS —
IOSTest(WebDriverAgent):ctx.agentのみ
ワークフロー
ステップ 1: ボイラープレートをクローンしてプロジェクトを準備する
bash scripts/clone-boilerplate.sh
~/.midscene/boilerplate/vitest-all-platforms-demo/ のボイラープレートは、プロジェクト構造、設定、プラットフォームコンテキストクラス、およびテスト規約の正規リファレンスです。現在のプロジェクトとを比較してください。何か足りない場合は、ユーザーに必要なプラットフォーム(Web / Android / iOS)を尋ね、ボイラープレートを目標状態として足りない部分を埋めてください。要求されたプラットフォーム用のファイルのみを含めてください。既存の設定やファイルは上書きしないでください。ボイラープレートから .env.example を .env としてコピーします(存在しない場合)。ユーザーに環境変数を入力するよう促してください。
ステップ 2: テストを書く前に下記の Midscene Agent API セクションを読む
このセクションは aiAct を使用するための必須ルールが含まれています — すべてのUI操作の主要API。このステップをスキップしないでください。
ステップ 3: テストを作成、更新、または実行する
ボイラープレートの e2e/ ディレクトリと src/context/ をパターンと規約のリファレンスとして使用してください。テストを実行する前に、依存関係がインストールされ、.env が設定されていることを確認してください。テストの失敗をデバッグする際は、troubleshooting.md を確認してください。
Midscene Agent API
ctx.agent はプラットフォーム固有のエージェントインスタンスです。すべてのメソッドは Promise を返します。
- Web:
@midscene/web/playwrightのPlaywrightAgent - Android:
@midscene/androidのAndroidAgent - iOS:
@midscene/iosのIOSAgent
3つのエージェントはすべて、以下の同じAIメソッドを共有します。
必須ルール: ユーザー記述のステップに aiAct を使用する
ユーザーが自然言語でUI動作または状態確認を説明している場合、それを実装するために
aiActを使用する必要があります。 ユーザーの指示をaiTap/aiInput/aiAssertまたは他の細粒度APIに分解しないでください。ユーザーの意図を直接aiActに渡し、Midscene の AI に計画と実行を任せてください。
// ユーザーが言う: "search box に iPhone と入力して search をクリック"
// 間違い — 細粒度APIに手動で分解している
await ctx.agent.aiInput('search box', { value: 'iPhone' });
await ctx.agent.aiTap('search button');
// 正しい — 意図を直接 aiAct に渡す
await ctx.agent.aiAct('type "iPhone" in the search box, then click the search button');
アサーション、データ抽出、および待機も aiAct で行うべきです — それはこれらすべてを処理します。aiAssert、aiQuery、aiWaitFor、aiTap、または aiInput を別々に使用しないでください。
aiAct(taskPrompt, opt?) — プライマリ API
aiAct はすべてのUI操作と状態確認のプライマリAPIです。 自然言語の指示を受け入れ、自律的に複数ステップの相互作用を計画および実行します。
// UI操作
await ctx.agent.aiAct('type "iPhone" in the search box, then click the search button');
await ctx.agent.aiAct('hover over the user avatar in the top right');
// 状態確認 / アサーション — aiAct も使用してください
await ctx.agent.aiAct('verify the page shows "Login successful"');
await ctx.agent.aiAct('verify the error message is visible');
フェーズ分割: タスクプロンプトが長すぎるか、複数の異なるステージに跨る場合、それを別々の aiAct 呼び出しに分割してください — フェーズごとに1つ。各フェーズは自己完結した論理的ステップであり、すべてのフェーズを組み合わせたものはユーザーの元々の意図と一致する必要があります。
// 間違い — プロンプトが複数のページと多くのステップに跨っており、途中でAIがコンテキストを失う可能性がある
await ctx.agent.aiAct('click the settings button in the top nav, go to settings page, find personal info and click into it, change email to "test@example.com", change phone to "13800000000", click save, wait for success');
// 正しい — ページ/ステージの境界で分割し、各フェーズは1つの論理的コンテキスト内に留まる
await ctx.agent.aiAct('click the settings button in the top nav, go to settings page, find personal info and click into it');
await ctx.agent.aiAct('change email to "test@example.com", change phone to "13800000000", click save');
await ctx.agent.aiAct('verify the save success message appears');
aiActionは廃止予定です。代わりにaiActまたはaiを使用してください。
よくある間違い
- 曖昧なロケータ —
'button'は曖昧です;'the blue "Submit" button at the top of the page'を使用してください - 廃止予定の
aiAction— 代わりにaiActを使用してください - 曖昧な複数要素のターゲット — 行/位置を指定してください:
'the delete button in the first product row'
エージェント設定 — aiActionContext
aiActionContext はエージェントによって実行されるすべてのAI操作に付加されるシステムプロンプト文字列です。AIの役割と専門知識を定義するために使用してください。
// setup() の agentOptions 経由で設定
const ctx = WebTest.setup('https://example.com', {
agentOptions: {
aiActionContext: 'You are a Web UI testing expert.',
},
});
良い例:
'You are a Web UI testing expert.''You are an Android app testing expert who is familiar with Chinese UI.'
悪い例:
'Click the login button.'— 具体的なアクションはaiActionContextではなくaiAct()に属します'The page is in Chinese.'— これはシステムプロンプトではなく、ページの説明です
詳細を調べる方法
node_modules/@midscene/web、node_modules/@midscene/android、およびnode_modules/@midscene/iosで、エージェントクラスの型定義を見つけてください- 型が十分でない場合、
.d.tsファイルのソース参照に従い、node_modulesの実装コードを読んでください - https://midscenejs.com/llms.txt をダウンロードして、
grepを使用して必要なAPIまたは概念を検索してください(ファイルは大きいため、全体を読まないでください)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- web-infra-dev
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/web-infra-dev/midscene-skills / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。