e2e-testing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAI E2E Testing — 8 Platforms, Zero Test Code
AI端到端测试——支持8大平台,无需编写测试代码
Give your AI agent eyes and hands inside any running app.
flutter-skill is an MCP server that connects AI agents to running apps. The agent can see screenshots, tap elements, enter text, scroll, navigate, inspect UI trees, and verify state — all through natural language.
为你的AI Agent赋予在任意运行中应用内的「眼」和「手」。
flutter-skill是一款MCP服务器,可将AI Agent与运行中的应用连接。Agent能够通过自然语言完成截图、点击元素、输入文本、滚动、导航、检查UI树以及验证状态等操作。
Supported Platforms
支持的平台
| Platform | Setup |
|---|---|
| Flutter (iOS/Android/Web) | |
| React Native | |
| Electron | |
| iOS (Swift/UIKit) | SPM: |
| Android (Kotlin) | Gradle: |
| Tauri (Rust) | |
| KMP Desktop | Gradle dependency |
| .NET MAUI | NuGet package |
Test scorecard: 562/567 (99.1%) across all 8 platforms.
| 平台 | 配置方式 |
|---|---|
| Flutter (iOS/Android/Web) | |
| React Native | |
| Electron | |
| iOS (Swift/UIKit) | SPM: |
| Android (Kotlin) | Gradle: |
| Tauri (Rust) | |
| KMP Desktop | Gradle依赖 |
| .NET MAUI | NuGet包 |
测试评分:全8大平台共567项测试,通过562项(通过率99.1%)。
Install
安装
bash
undefinedbash
undefinednpm (recommended)
npm(推荐)
npm install -g flutter-skill
npm install -g flutter-skill
Homebrew
Homebrew
brew install ai-dashboad/flutter-skill/flutter-skill
brew install ai-dashboad/flutter-skill/flutter-skill
Or download binary from GitHub Releases
或从GitHub Releases下载二进制文件
undefinedundefinedMCP Configuration
MCP配置
Add to your AI agent's MCP config (Claude Desktop, Cursor, Windsurf, OpenClaw, etc.):
json
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}添加到你的AI Agent的MCP配置中(Claude Desktop、Cursor、Windsurf、OpenClaw等):
json
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}OpenClaw
OpenClaw
If using OpenClaw, add to your gateway config under :
mcp.serversyaml
mcp:
servers:
flutter-skill:
command: flutter-skill
args: ["server"]如果使用OpenClaw,在网关配置的下添加:
mcp.serversyaml
mcp:
servers:
flutter-skill:
command: flutter-skill
args: ["server"]Quick Start
快速开始
1. Initialize your app (one-time)
1. 初始化你的应用(仅需一次)
bash
cd /path/to/your/app
flutter-skill initAuto-detects project type and patches your app with the testing bridge.
bash
cd /path/to/your/app
flutter-skill init自动检测项目类型,并为你的应用添加测试桥接补丁。
2. Launch and connect
2. 启动并连接
bash
flutter-skill launch .bash
flutter-skill launch .3. Test with natural language
3. 使用自然语言测试
Tell the agent what to test:
"Test the login flow — enter admin@test.com and password123, tap Login, verify Dashboard appears"
The agent will automatically:
- → see the current screen
screenshot() - → discover all tappable/typeable elements with semantic refs
inspect_interactive() - → tap using stable semantic reference
tap(ref: "button:Login") - → type into field
enter_text(ref: "input:Email", text: "admin@test.com") - → verify navigation
wait_for_element(key: "Dashboard") - → confirm final state
screenshot()
告诉Agent你要测试的内容:
"测试登录流程——输入admin@test.com和password123,点击登录按钮,验证仪表盘页面是否出现"
Agent会自动执行以下操作:
- → 捕获当前屏幕
screenshot() - → 发现所有可点击/可输入元素及其语义引用
inspect_interactive() - → 使用稳定的语义引用点击按钮
tap(ref: "button:Login") - → 在输入框中输入文本
enter_text(ref: "input:Email", text: "admin@test.com") - → 验证页面导航
wait_for_element(key: "Dashboard") - → 确认最终状态
screenshot()
Available MCP Tools
可用的MCP工具
Core Actions
核心操作
| Tool | Description |
|---|---|
| Capture current screen as image |
| Tap element by key, text, ref, or coordinates |
| Type text into a field |
| Scroll up/down/left/right |
| Swipe gesture between points |
| Long press an element |
| Drag from point A to B |
| Navigate back |
| Send keyboard key events |
| 工具 | 描述 |
|---|---|
| 捕获当前屏幕为图片 |
| 通过键、文本、引用或坐标点击元素 |
| 在输入框中输入文本 |
| 向上/向下/向左/向右滚动 |
| 在两点间执行滑动手势 |
| 长按元素 |
| 从A点拖动到B点 |
| 返回上一页 |
| 发送键盘按键事件 |
Inspection (v0.8.0+)
检查功能(v0.8.0+)
| Tool | Description |
|---|---|
| NEW — Get all interactive elements with semantic ref IDs |
| List all elements on screen |
| Find element by key or text |
| Wait for element to appear (with timeout) |
| Get detailed properties of an element |
| 工具 | 描述 |
|---|---|
| 新增 — 获取所有带语义引用ID的可交互元素 |
| 列出屏幕上的所有元素 |
| 通过键或文本查找元素 |
| 等待元素出现(带超时机制) |
| 获取元素的详细属性 |
Text Manipulation
文本操作
| Tool | Description |
|---|---|
| Replace text in a field |
| Clear a text field |
| Read text content |
| 工具 | 描述 |
|---|---|
| 替换输入框中的文本 |
| 清空输入框 |
| 读取文本内容 |
App Control
应用控制
| Tool | Description |
|---|---|
| Read app logs |
| Clear log buffer |
| 工具 | 描述 |
|---|---|
| 读取应用日志 |
| 清空日志缓冲区 |
Semantic Refs (v0.8.0)
语义引用(v0.8.0)
inspect_interactivebutton:Login → Login button
input:Email → Email text field
toggle:Dark Mode → Dark mode switch
button:Submit[1] → Second Submit button (disambiguated)Format:
{role}:{content}[{index}]7 roles: , , , , , ,
buttoninputtogglesliderselectlinkitemUse refs for reliable element targeting that survives UI changes:
tap(ref: "button:Login")
enter_text(ref: "input:Email", text: "test@example.com")inspect_interactivebutton:Login → 登录按钮
input:Email → 邮箱输入框
toggle:Dark Mode → 暗黑模式开关
button:Submit[1] → 第二个提交按钮(已区分)格式:
{角色}:{内容}[{索引}]7种角色:、、、、、、
buttoninputtogglesliderselectlinkitem使用引用进行可靠的元素定位,即使UI发生变化也不受影响:
tap(ref: "button:Login")
enter_text(ref: "input:Email", text: "test@example.com")Testing Workflow
测试工作流
Basic Flow
基础流程
screenshot() → inspect_interactive() → tap/enter_text → screenshot() → verifyscreenshot() → inspect_interactive() → tap/enter_text → screenshot() → 验证Comprehensive Testing
全面测试
"Explore every screen of this app. Test all buttons, forms, navigation, and edge cases. Report any bugs you find."
The agent will systematically:
- Navigate every screen via tab bars, menus, links
- Interact with every interactive element
- Test form validation (empty, invalid, valid inputs)
- Test edge cases (long text, special characters, emoji)
- Verify navigation flows (forward, back, deep links)
- Take screenshots at each step for verification
"探索应用的每一个页面。测试所有按钮、表单、导航和边缘情况。报告发现的任何Bug。"
Agent会系统性地执行以下操作:
- 通过标签栏、菜单、链接导航到每一个页面
- 与所有可交互元素进行交互
- 测试表单验证(空值、无效值、有效值输入)
- 测试边缘情况(长文本、特殊字符、表情符号)
- 验证导航流程(前进、后退、深度链接)
- 在每一步截图以便验证
Example Prompts
示例提示词
Quick smoke test:
"Tap every tab and screenshot each page"
Form testing:
"Fill the registration form with edge case data — emoji name, very long email, short password — and verify error messages"
Navigation:
"Test the complete user journey: sign up → create post → like → comment → delete → sign out"
Accessibility:
"Check every screen for missing labels, small tap targets, and contrast issues"
快速冒烟测试:
"点击每个标签页并截图每个页面"
表单测试:
"用边缘情况数据填写注册表单——表情符号名称、超长邮箱、短密码——并验证错误提示"
导航测试:
"测试完整用户旅程:注册→创建帖子→点赞→评论→删除→登出"
无障碍测试:
"检查每个页面是否存在缺失标签、点击目标过小和对比度问题"
Tips
小贴士
- Always start with — see before you act
screenshot() - Use to discover elements — don't guess at selectors
inspect_interactive() - Prefer selectors — more stable than text or coordinates
ref: - after navigation — apps need time to transition
wait_for_element() - Screenshot after every action — verify the expected effect
- Use for keyboard shortcuts — test keyboard navigation
press_key
- 始终从开始 — 先查看再操作
screenshot() - 使用发现元素 — 不要猜测选择器
inspect_interactive() - 优先使用选择器 — 比文本或坐标更稳定
ref: - 导航后使用— 应用需要时间完成过渡
wait_for_element() - 每次操作后截图 — 验证预期效果
- 使用测试键盘快捷键 — 测试键盘导航
press_key