mcpField
E
e2e-testing

e2e-testing

github.com/ai-dashboad测试与质量398258 次安装8 周前更新
代码仓库

关于 e2e-testing

e2e-testing 借助 flutter-skill,让 AI Agent 通过自然语言操作正在运行的应用,无需编写测试代码。它支持八个平台,并提供语义元素引用,便于可靠交互和状态检查。

主要功能

  1. 01支持八个平台的应用测试
  2. 02截图与界面检查
  3. 03点击、输入、滚动和导航操作
  4. 04元素语义引用
  5. 05应用日志与状态验证

适用场景

  1. 01测试登录和表单流程
  2. 02验证屏幕间导航
  3. 03检查交互后的界面行为
  4. 04诊断应用异常状态

MCP 相关

flutter-skill 是 MCP 服务,向 AI Agent 提供应用控制、截图、界面检查、文本处理和日志工具。Agent 可使用这些工具操作并验证运行中的应用。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ai-dashboad/flutter-skill --skill e2e-testing

安装后在 Claude Code 中输入/e2e-testing确认已加载。

详细介绍

AI 端到端测试 —— 8 个平台,无需编写测试代码

flutter-skill 是一个 MCP 服务,可将 AI Agent 连接到 8 个平台上运行的应用。Agent 通过自然语言进行截图、点击元素、输入文本、滚动、导航、检查 UI 树和验证状态。

支持的平台

平台设置
Flutter (iOS/Android/Web)flutter pub add flutter_skill
React Nativenpm install flutter-skill-react-native
Electronnpm install flutter-skill-electron
iOS (Swift/UIKit)SPM:FlutterSkillSDK
Android (Kotlin)Gradle:flutter-skill-android
Tauri (Rust)cargo add flutter-skill-tauri
KMP DesktopGradle 依赖
.NET MAUINuGet 包

安装

# npm (recommended)
npm install -g flutter-skill

# Homebrew
brew install ai-dashboad/flutter-skill/flutter-skill

# Or download binary from GitHub Releases

MCP 配置

将以下内容添加到 AI Agent 的 MCP 配置中(Claude Desktop、Cursor、Windsurf、OpenClaw 等):

{
  "mcpServers": {
    "flutter-skill": {
      "command": "flutter-skill",
      "args": ["server"]
    }
  }
}

快速开始

1. 初始化应用(一次性操作)
flutter-skill init

自动检测项目类型,并为应用添加测试桥接。

验证: 输出应确认已检测到项目类型,并已修改主入口点。如果失败,请确认当前位于项目根目录,且框架受支持。

2. 启动并连接
flutter-skill launch .

验证: 输出中会显示 VM Service URI(例如 ws://127.0.0.1:50000/ws)。如果没有显示 URI,请确认已安装 Flutter/目标框架,且应用可以编译。

3. 使用自然语言测试

Agent 遵循以下核心循环:

  1. screenshot() — 查看当前屏幕
  2. inspect_interactive() — 查找所有可点击/可输入的元素及其语义引用
  3. tap(ref: "button:Login") — 使用稳定的语义引用点击
  4. enter_text(ref: "input:Email", text: "[email protected]") — 在字段中输入文本
  5. wait_for_element(key: "Dashboard") — 验证导航是否成功
  6. screenshot() — 确认最终状态

如果 inspect_interactive() 未返回任何元素: 截图确认屏幕已加载,然后使用 get_logs() 检查错误。应用可能仍在加载——稍等片刻后重试。

可用的 MCP 工具

核心操作
工具描述
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          → Login button
input:Email           → Email text field
toggle:Dark Mode      → Dark mode switch
button:Submit[1]      → Second Submit button (disambiguated)

格式:{role}:{content}[{index}]

7 种角色:button、input、toggle、slider、select、link、item

使用引用可以可靠地定位元素,即使 UI 发生变化也能正常工作:

tap(ref: "button:Login")
enter_text(ref: "input:Email", text: "[email protected]")

测试工作流

核心循环
screenshot() → inspect_interactive() → tap/enter_text → screenshot() → verify

始终在操作前后调用 screenshot()。导航后使用 wait_for_element()——应用需要时间完成页面切换。

验证检查点
  • 调用 screenshot() 后:确认显示的是预期屏幕,再执行操作。
  • 调用 tap() 或 enter_text() 后:调用 screenshot(),验证 UI 已响应。
  • 导航后:使用带超时设置的 wait_for_element(key: "target_screen")。如果超时,调用 screenshot() 和 get_logs() 进行诊断。
  • 出现意外状态时:调用 get_logs() 和 inspect_interactive(),了解当前存在的元素。
元素定位优先级
  1. ref:(最可靠)——来自 inspect_interactive() 的语义 ref
  2. key: ——由开发者设置的组件 key
  3. text: ——可见文本内容(文本变化时容易失效)
  4. 坐标 ——最后手段,在不同屏幕尺寸下可能失效

链接

评论

支持 Markdown