重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
e2e-testing by ai-dashboad/flutter-skill
npx skills add https://github.com/ai-dashboad/flutter-skill --skill e2e-testing为您的 AI 代理在任何运行中的应用赋予“眼睛”和“双手”。
flutter-skill 是一个 MCP 服务器,可将 AI 代理连接到正在运行的应用程序。代理可以通过自然语言查看屏幕截图、点击元素、输入文本、滚动、导航、检查 UI 树以及验证状态。
| 平台 | 设置 |
|---|---|
| Flutter (iOS/Android/Web) | flutter pub add flutter_skill |
| React Native | npm install flutter-skill-react-native |
| Electron | npm install flutter-skill-electron |
| iOS (Swift/UIKit) | SPM: FlutterSkillSDK |
| Android (Kotlin) |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
Gradle: flutter-skill-android |
| Tauri (Rust) | cargo add flutter-skill-tauri |
| KMP Desktop | Gradle 依赖项 |
| .NET MAUI | NuGet 包 |
测试记分卡:在所有 8 个平台上达到 562/567 (99.1%)。
# npm (推荐)
npm install -g flutter-skill
# Homebrew
brew install ai-dashboad/flutter-skill/flutter-skill
# 或从 GitHub Releases 下载二进制文件
添加到您的 AI 代理的 MCP 配置中(Claude Desktop、Cursor、Windsurf、OpenClaw 等):
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
如果使用 OpenClaw,请添加到您的网关配置中的 mcp.servers 下:
mcp:
servers:
flutter-skill:
command: flutter-skill
args: ["server"]
cd /path/to/your/app
flutter-skill init
自动检测项目类型,并使用测试桥接器修补您的应用。
flutter-skill launch .
告诉代理要测试什么:
“测试登录流程 — 输入 admin@test.com 和密码 123,点击登录,验证仪表板出现”
代理将自动执行:
screenshot() → 查看当前屏幕inspect_interactive() → 发现所有带有语义引用的可点击/可输入元素tap(ref: "button:Login") → 使用稳定的语义引用进行点击enter_text(ref: "input:Email", text: "admin@test.com") → 在字段中输入文本wait_for_element(key: "Dashboard") → 验证导航screenshot() → 确认最终状态| 工具 | 描述 |
|---|---|
screenshot | 将当前屏幕捕获为图像 |
tap | 通过键、文本、引用或坐标点击元素 |
enter_text | 在字段中输入文本 |
scroll | 向上/下/左/右滚动 |
swipe | 在点之间滑动 |
long_press | 长按元素 |
drag | 从点 A 拖拽到点 B |
go_back | 导航返回 |
press_key | 发送键盘按键事件 |
| 工具 | 描述 |
|---|---|
inspect_interactive | 新增 — 获取所有带有语义引用 ID 的交互式元素 |
get_elements | 列出屏幕上的所有元素 |
find_element | 通过键或文本查找元素 |
wait_for_element | 等待元素出现(带超时) |
get_element_properties | 获取元素的详细属性 |
| 工具 | 描述 |
|---|---|
set_text | 替换字段中的文本 |
clear_text | 清空文本字段 |
get_text | 读取文本内容 |
| 工具 | 描述 |
|---|---|
get_logs | 读取应用日志 |
clear_logs | 清除日志缓冲区 |
inspect_interactive 返回带有稳定语义引用 ID 的元素:
button:Login → 登录按钮
input:Email → 电子邮件文本字段
toggle:Dark Mode → 深色模式开关
button:Submit[1] → 第二个提交按钮(用于区分)
格式:{role}:{content}[{index}]
7 种角色:button, input, toggle, slider, select, link, item
使用引用来实现可靠的元素定位,即使在 UI 更改后也能保持稳定:
tap(ref: "button:Login")
enter_text(ref: "input:Email", text: "test@example.com")
screenshot() → inspect_interactive() → tap/enter_text → screenshot() → verify
“探索此应用的每个屏幕。测试所有按钮、表单、导航和边界情况。报告发现的任何错误。”
代理将系统地:
快速冒烟测试:
“点击每个标签页,并对每个页面进行截图”
表单测试:
“使用边界情况数据填写注册表单 — 表情符号名称、超长电子邮件、短密码 — 并验证错误消息”
导航:
“测试完整的用户旅程:注册 → 创建帖子 → 点赞 → 评论 → 删除 → 退出登录”
无障碍访问:
“检查每个屏幕是否存在缺少标签、点击目标过小和对比度问题”
screenshot() 开始 — 先看后动inspect_interactive() 来发现元素 — 不要猜测选择器ref: 选择器 — 比文本或坐标更稳定wait_for_element() — 应用需要时间进行过渡press_key 处理键盘快捷键 — 测试键盘导航每周安装量
60
代码仓库
GitHub 星标数
57
首次出现
2026 年 2 月 15 日
安全审计
安装于
codex58
opencode57
gemini-cli56
amp56
github-copilot56
kimi-cli56
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.
| Platform | Setup |
|---|---|
| Flutter (iOS/Android/Web) | flutter pub add flutter_skill |
| React Native | npm install flutter-skill-react-native |
| Electron | npm install flutter-skill-electron |
| iOS (Swift/UIKit) | SPM: FlutterSkillSDK |
| Android (Kotlin) | Gradle: flutter-skill-android |
| Tauri (Rust) | cargo add flutter-skill-tauri |
| KMP Desktop | Gradle dependency |
| .NET MAUI | NuGet package |
Test scorecard: 562/567 (99.1%) across all 8 platforms.
# npm (recommended)
npm install -g flutter-skill
# Homebrew
brew install ai-dashboad/flutter-skill/flutter-skill
# Or download binary from GitHub Releases
Add to your AI agent's MCP config (Claude Desktop, Cursor, Windsurf, OpenClaw, etc.):
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
If using OpenClaw, add to your gateway config under mcp.servers:
mcp:
servers:
flutter-skill:
command: flutter-skill
args: ["server"]
cd /path/to/your/app
flutter-skill init
Auto-detects project type and patches your app with the testing bridge.
flutter-skill launch .
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:
screenshot() → see the current screeninspect_interactive() → discover all tappable/typeable elements with semantic refstap(ref: "button:Login") → tap using stable semantic referenceenter_text(ref: "input:Email", text: "admin@test.com") → type into fieldwait_for_element(key: "Dashboard") → verify navigationscreenshot() → confirm final state| Tool | Description |
|---|---|
screenshot | Capture current screen as image |
tap | Tap element by key, text, ref, or coordinates |
enter_text | Type text into a field |
scroll | Scroll up/down/left/right |
swipe | Swipe gesture between points |
long_press | Long press an element |
| Tool | Description |
|---|---|
inspect_interactive | NEW — Get all interactive elements with semantic ref IDs |
get_elements | List all elements on screen |
find_element | Find element by key or text |
wait_for_element | Wait for element to appear (with timeout) |
get_element_properties | Get detailed properties of an element |
| Tool | Description |
|---|---|
set_text | Replace text in a field |
clear_text | Clear a text field |
get_text | Read text content |
| Tool | Description |
|---|---|
get_logs | Read app logs |
clear_logs | Clear log buffer |
inspect_interactive returns elements with stable semantic reference IDs:
button: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: button, input, toggle, slider, select, link, item
Use refs for reliable element targeting that survives UI changes:
tap(ref: "button:Login")
enter_text(ref: "input:Email", text: "test@example.com")
screenshot() → inspect_interactive() → tap/enter_text → screenshot() → verify
"Explore every screen of this app. Test all buttons, forms, navigation, and edge cases. Report any bugs you find."
The agent will systematically:
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"
screenshot() — see before you actinspect_interactive() to discover elements — don't guess at selectorsref: selectors — more stable than text or coordinateswait_for_element() after navigation — apps need time to transitionpress_key for keyboard shortcuts — test keyboard navigationWeekly Installs
60
Repository
GitHub Stars
57
First Seen
Feb 15, 2026
Security Audits
Gen Agent Trust HubPassSocketWarnSnykFail
Installed on
codex58
opencode57
gemini-cli56
amp56
github-copilot56
kimi-cli56
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
48,700 周安装
drag | Drag from point A to B |
go_back | Navigate back |
press_key | Send keyboard key events |