vitest-midscene-e2e
web-infra-dev/midscene-skills
Erweitert Vitest um Midscene für AI-gestütztes UI-Testing in Web-Umgebungen (Playwright), auf Android (ADB) sowie in iOS-Anwendungen (WDA). Es erstellt Projektstrukturen, konvertiert bestehende Projekte und führt/aktualisiert/diagnostiziert/ausführt E2E-Tests mithilfe von UI-Interaktionen in natürlicher Sprache. Auslöser: Test schreiben, Test hinzufügen, Test erstellen, Test aktualisieren, Test beheben, Test debuggen, Test ausführen, E2E-Test, Midscene-Test, neues Projekt, Projekt konvertieren, Projekt initialisieren, 写测试, 加测试, 创建测试, 更新测试, 修复测试, 调试测试, 运行测试, 新建工程, 转化工程.
...Alle erweiternÜber vitest-midscene-e2e
vitest-midscene-e2e erweitert das Vitest-Testframework um Midscene, um auf KI basierende, sprachbasierte End-to-End-UI-Tests für Web (Playwright Chromium), Android (ADB und scrcpy) sowie iOS (WebDriverAgent) zu erstellen. Es beseitigt die Anfälligkeit von E2E-Tests, die auf Selektoren beruhen: Anstatt einen Benutzerfluss in brüchige Tastvorgänge und Eingaben zu zerlegen, übermittelt der Tester eine klare Sprachanweisung an den Agenten von Midscene, der anschließend die Interaktion plant und ausführt. Die Lösung ermöglicht es, neue Testprojekte aufzubauen, bestehende umzuwandeln sowie Tests zu erstellen, zu aktualisieren, zu debuggen und auszuführen – dabei werden zweisprachige (Englisch und Chinesisch) Auslösephrasen verwendet.
Der Arbeitsablauf beginnt damit, über ein mitgeliefertes Skript ein standardisiertes Vorlagenprojekt zu klonen. Anschließend wird das aktuelle Projekt damit verglichen und nur das, was für die gewünschten Plattformen fehlt, hinzugefügt – ohne bestehende Konfigurationen zu überschreiben. Zudem wird eine Datei .env.example in .env kopiert, damit der Benutzer diese ausfüllen kann. Eine zentrale Regel besagt, dass vom Benutzer beschriebene UI-Schritte ausschließlich über die primäre API aiAct umgesetzt werden müssen, anstatt über detailliertere Aufrufe wie aiTap/aiInput/aiAssert. So kann die KI für Planung, Überprüfung, Datenauswertung und Warten zuständig sein. Die Dokumentation enthält Informationen zu plattformspezifischen Agentenklassen, die dieselben KI-Methoden nutzen, zur Aufteilung langer Anweisungen in Abschnitte entsprechend Seiten- oder Phasengrenzen, zur begrenzten Dateiübertragung auf einen definierten Ordner (fileChooserAllowedDir – wobei explizit der Projektwurzel- oder Heimordner vermieden werden soll), zu einem Systemaufruf aiActionContext zur Angabe der Expertise des Testers, zu häufigen Fehlern bei der Ortung von Elementen sowie zu Hilfestellungen bei Fehlern.
Zielgruppe sind Entwickler und QA-Engineer, die cross-platform E2E-Tests schreiben möchten und eine widerstandsfähige, sprachbasierte Automatisierung für Web, Android und iOS benötigen. Für die Nutzung sind konfigurierte Umgebungsvariablen erforderlich (einschließlich der Zugangsdaten des KI-Modells für Midscene) sowie Plattform-Toolchains wie Playwright, ADB oder WebDriverAgent. Die Lösung führt ein Klonierungs-Skript aus und steuert die Ausführung der Tests, ist jedoch auf legitime Testworkflows beschränkt. Zudem wird empfohlen, die Verzeichnisse für Dateiübertragungen einzuschränken, anstatt allgemeine Pfade zu verwenden.
FAQ
Welche Plattformen werden unterstützt?
Web über Playwright Chromium, Android über ADB und scrcpy sowie iOS über WebDriverAgent. Im Web stehen sowohl ctx.agent als auch ctx.page zur Verfügung; auf Android und iOS gilt nur ctx.agent. Alle drei Agenten nutzen dieselben KI-Methoden.
Wie schreibe ich einen Testschritt?
Übermitteln Sie die Absicht des Benutzers in natürlicher Sprache an die primäre API aiAct, anstatt sie in Aufrufe wie aiTap, aiInput oder aiAssert aufzuteilen. aiAct übernimmt außerdem die Überprüfung, Datenauswertung und das Warten; der veraltete Aufruf aiAction sollte durch aiAct ersetzt werden.
Welche Einrichtungen sind erforderlich?
Klonen Sie das Vorlagenprojekt mit dem bereitgestellten Skript, installieren Sie die Abhängigkeiten und konfigurieren Sie eine Datei .env (kopiert aus .env.example) mit den notwendigen Variablen, einschließlich der Zugangsdaten des KI-Modells für Midscene. Zudem benötigen Sie die entsprechende Plattform-Toolchain (Playwright, ADB/scrcpy oder WebDriverAgent).
Wie werden Dateiübertragungen sicher abgewickelt?
Wenn ein aiAct-Aufruf Dateien hochlädt, geben Sie den Ordner fileChooserAllowedDir mit dem kleinsten Verzeichnis an, das die Test-Dateien enthält. Explizit wird empfohlen, weder die Projektwurzel noch den Heimordner zu verwenden.
Was passiert, wenn eine Anweisung mehrere Schritte umfasst?
Teilen Sie die Anweisung in separate aiAct-Aufrufe entsprechend Seiten- oder Phasengrenzen auf, damit die KI den Kontext während des Vorgangs nicht verliert – wobei sichergestellt werden muss, dass alle Schritte zusammen der ursprünglichen Absicht entsprechen. Eine Hilfestellung zur Fehlerbehebung gibt Anleitungen bei Problemen.
Alle Dateien
3 DateienSKILL.md7,0 KBAnsehenscripts/clone-boilerplate.sh1,2 KBAnsehenreferences/troubleshooting.md2,2 KBAnsehen
Modules
| Module | Role |
|---|---|
| Vitest | TypeScript test framework. Provides describe/it/expect/hooks for test organization, assertions, and lifecycle. |
| Midscene | AI-driven UI automation. Interacts with UI elements via natural language — no fragile selectors. Core API: aiAct. |
Supported platforms:
- Web —
WebTest(Playwright Chromium):ctx.agent+ctx.page - Android —
AndroidTest(ADB + scrcpy):ctx.agentonly - iOS —
IOSTest(WebDriverAgent):ctx.agentonly
Workflow
Step 1: Clone boilerplate & ensure project ready
bash scripts/clone-boilerplate.sh
The boilerplate at ~/.midscene/boilerplate/vitest-all-platforms-demo/ is the canonical reference for project structure, configs, platform context classes, and test conventions. Compare the current project against it. If anything is missing, ask the user which platform(s) they need (Web / Android / iOS), then fill in what's missing using the boilerplate as the target state. Only include files for the requested platform(s). Do NOT overwrite existing configs or files. Copy .env.example from the boilerplate as .env if it doesn't exist, and prompt the user to fill in the env vars.
Step 2: Read the Midscene Agent API section below before writing tests
It contains mandatory rules for using aiAct — the primary API for all UI operations. Do NOT skip this step.
Step 3: Create, update, or run tests
Use the boilerplate's e2e/ directory and src/context/ as reference for patterns and conventions. Before running tests, ensure dependencies are installed and .env is configured. When debugging failures, check troubleshooting.md.
Midscene Agent API
ctx.agent is a platform-specific agent instance. All methods return Promises.
- Web:
PlaywrightAgentfrom@midscene/web/playwright - Android:
AndroidAgentfrom@midscene/android - iOS:
IOSAgentfrom@midscene/ios
All three agents share the same AI methods below.
Mandatory Rule: Use aiAct for User-Described Steps
When the user describes a UI action or state confirmation in natural language, you MUST use
aiActto implement it. Do NOT decompose user instructions intoaiTap/aiInput/aiAssertor other fine-grained APIs. Pass the user's intent directly toaiActand let Midscene's AI handle the planning and execution.
// User says: "type iPhone in the search box and click search"// WRONG — manually decomposing into fine-grained APIsawait ctx.agent.aiInput('search box', { value: 'iPhone' });await ctx.agent.aiTap('search button');// CORRECT — pass intent directly to aiActawait ctx.agent.aiAct('type "iPhone" in the search box, then click the search button');
Assertions, data extraction, and waiting should also be done via aiAct — it handles all of these. Do NOT use aiAssert, aiQuery, aiWaitFor, aiTap, or aiInput separately.
aiAct(taskPrompt, opt?) — Primary API
aiAct is the primary API for all UI operations and state confirmations. It accepts natural language instructions and autonomously plans and executes multi-step interactions.
// UI operationsawait 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');// State confirmations / assertions — also use aiActawait ctx.agent.aiAct('verify the page shows "Login successful"');await ctx.agent.aiAct('verify the error message is visible');
Prompt-driven File Uploads (Web only)
When an aiAct prompt asks Midscene to upload files, pass fileChooserAllowedDir explicitly. Use the smallest directory containing that test case's fixtures, and refer to files relative to it in the prompt. Do not use the project root or a home directory. Replace ./fixtures below with the fixture directory relative to the test process working directory.
await ctx.agent.aiAct( 'click the upload button and upload avatar.png', { fileChooserAllowedDir: './fixtures' },);
Phase splitting: If the task prompt is too long or covers multiple distinct stages, split it into separate aiAct calls — one per phase. Each phase should be a self-contained logical step, and all phases combined must match the user's original intent.
// Incorrect — prompt spans multiple pages and too many steps, AI may lose context mid-wayawait 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 "[email protected]", change phone to "13800000000", click save, wait for success');// Correct — split by page/stage boundary, each phase stays within one logical contextawait 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 "[email protected]", change phone to "13800000000", click save');await ctx.agent.aiAct('verify the save success message appears');
aiActionis deprecated. UseaiActoraiinstead.
Common Mistakes
- Vague locators —
'button'is ambiguous; use'the blue "Submit" button at the top of the page' - Deprecated
aiAction— useaiActinstead - Ambiguous multi-element targets — specify row/position:
'the delete button in the first product row'
Agent Configuration — aiActionContext
aiActionContext is a system prompt string appended to all AI actions performed by the agent. Use it to define the AI's role and expertise.
// Set via agentOptions in setup()const ctx = WebTest.setup('https://example.com', { agentOptions: { aiActionContext: 'You are a Web UI testing expert.', },});
Good examples:
'You are a Web UI testing expert.''You are an Android app testing expert who is familiar with Chinese UI.'
Bad examples:
'Click the login button.'— specific actions belong inaiAct(), notaiActionContext'The page is in Chinese.'— this is page description, not a system prompt
How to Look Up More
- In
node_modules/@midscene/web,node_modules/@midscene/android, andnode_modules/@midscene/ios, find the type definitions for the agent classes - If types are not enough, follow the source references in the
.d.tsfiles to read the implementation code innode_modules - Download https://midscenejs.com/llms.txt, then use
grepto search for the API or concept you need (the file is large, do not read it in full)
Alle Dateien
3 Dateienvitest-midscene-e2e installieren
Laden Sie die Skill-Dateien herunter und extrahieren Sie sie in Ihren Ordner .claude/skills/.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/web-infra-dev/midscene-skills/blob/main/skills/vitest-midscene-e2e/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
