mpiton/tauri-pilot
GitHub: mpiton/tauri-pilot
为 Tauri v2 应用提供交互式测试 CLI,让 AI 代理能实时检查、交互与调试桌面 UI。
Stars: 17 | Forks: 5
# tauri-pilot
**Tauri v2 应用的交互式测试 CLI** — 让 AI 代理(Claude Code)和开发者能够实时检查、交互与调试 Tauri 应用。
```
$ tauri-pilot snapshot -i
- heading "PR Dashboard" [ref=e1]
- textbox "Search PRs" [ref=e2] value=""
- button "Refresh" [ref=e3]
- list "PR List" [ref=e4]
- listitem "fix: resolve memory leak #142" [ref=e5]
- listitem "feat: add workspace support #138" [ref=e6]
- button "Load More" [ref=e7]
$ tauri-pilot click @e3
ok
$ tauri-pilot fill @e2 "workspace"
ok
```
## 为什么?
目前没有工具能让 AI 代理与 Tauri 应用 UI 进行交互。Playwright 无法工作(Tauri 使用系统 WebView — Linux 上是 WebKitGTK,macOS 上是 WebKit — 而不是 Chromium)。tauri-pilot 通过一个轻量级插件 + CLI 填补这一空白,它使用一种为 LLM 消费优化的协议进行通信。
## 工作原理
```
┌──────────────┐ Unix Socket ┌─────────────────────────────┐
│ tauri-pilot │ ◄──────────────► │ tauri-plugin-pilot (Rust) │
│ (CLI) │ JSON-RPC │ embedded in your app │
└──────────────┘ │ │
│ ┌─────────────────────┐ │
│ │ JS Bridge (injected)│ │
│ │ window.__PILOT__ │ │
│ └─────────────────────┘ │
│ WebView │
└─────────────────────────────┘
```
1. **插件**嵌入到你的 Tauri 应用(仅调试构建),启动一个 Unix 套接字服务器
2. **CLI**连接到该套接字,发送 JSON-RPC 命令
3. **JS 桥接**注入到 WebView 中,负责 DOM 检查与交互
## 快速开始
### 1. 添加插件到你的 Tauri 应用
```
# src-tauri/Cargo.toml
[dependencies]
tauri-plugin-pilot = { git = "https://github.com/mpiton/tauri-pilot" }
```
```
// src-tauri/src/main.rs
fn main() {
let mut builder = tauri::Builder::default();
#[cfg(debug_assertions)]
{
builder = builder.plugin(tauri_plugin_pilot::init());
}
builder.run(tauri::generate_context!()).expect("error running app");
}
```
### 2. 安装 CLI
```
cargo install tauri-pilot-cli
```
可选地,让你的 Agent 可以使用:
```
npx skills add https://github.com/mpiton/tauri-pilot
```
### 3. 使用它
```
# 检查连接
tauri-pilot ping
# 检查 UI
tauri-pilot snapshot -i # interactive elements only
tauri-pilot snapshot -s "#sidebar" # scoped to a CSS selector
# 交互
tauri-pilot click @e3
tauri-pilot fill @e2 "hello"
tauri-pilot press Enter
# 验证
tauri-pilot assert text @e1 "Expected text"
tauri-pilot assert visible @e3
tauri-pilot wait --selector ".success-message"
# 使用 JavaScript 调试
tauri-pilot eval "document.title"
tauri-pilot eval - <<'EOF'
document.querySelector('[data-id="main"]').textContent
EOF
echo 'window.location.pathname' | tauri-pilot eval -
```
对于复杂或多行脚本,请使用 `tauri-pilot eval -`。单引号 heredoc 分隔符(`<<'EOF'`)会禁用 shell 扩展,因此 JavaScript 中的 `$`、反引号和引号无需转义。
## 命令
| 命令 | 描述 |
|------|------|
| `ping` | 健康检查 |
| `snapshot` | 可访问性树(含引用,`--save` 可持久化) |
| `diff` | 比较快照,仅显示变更 |
| `click` | 点击元素 |
| `fill` | 清空并输入内容 |
| `type` | 输入内容但不清空 |
| `press` | 发送按键 |
| `select` | 选择下拉选项 |
| `check` | 切换复选框 |
| `scroll` | 滚动页面或元素 |
| `drag` | 拖动元素到元素或偏移位置 |
| `drop` | 模拟文件拖放 |
| `text` | 获取元素文本内容 |
| `html` | 获取元素 innerHTML |
| `value` | 获取输入值 |
| `attrs` | 获取所有属性 |
| `eval` | 执行任意 JS |
| `ipc` | 调用 Tauri IPC 命令 |
| `screenshot` | 截图为 PNG |
| `wait` | 等待元素出现或消失 |
| `navigate` | 更改 WebView URL |
| `state` | 获取 URL、标题、视口与滚动位置 |
| `assert` | 一步验证(文本、可见、隐藏、值、数量、选中、包含、URL;退出 0 = 通过,1 = 失败) |
| `watch` | 观察 DOM 变动 |
| `storage` | 读写 localStorage 与 sessionStorage(`--session`) |
| `logs` | 捕获并显示控制台输出 |
| `network` | 捕获并显示网络请求 |
| `record` | 录制交互(`start`、`stop --output`、`status`) |
| `replay` | 回放录制会话(`--export sh` 生成 Shell 脚本) |
| `mcp` | 通过 stdio 启动 Model Context Protocol 服务器 |
## 针对 AI 代理
tauri-pilot 专为 AI 代理设计。工作流程如下:
1. `tauri-pilot snapshot -i` — 获取带有引用的可访问性树
2. 读取输出中的引用(如 `@e1`、`@e2`)
3. `tauri-pilot click @e3` — 使用引用进行交互
4. `tauri-pilot assert text @e1 "Dashboard"` — 一步验证状态(退出 0 = 通过,1 = 失败)
5. `tauri-pilot diff -i` — 仅查看变更(节省令牌,无需完整重拍)
6. `tauri-pilot logs --level error` — 检查 JS 错误
`assert` 命令替代了手动 `text @ref` + 解析 + 比较的模式,减少往返与令牌消耗。
如需程序化解析,请使用 `--json` 获取结构化输出。
### MCP 服务器
对于具备原生 MCP 支持的代理,可以直接以 stdio MCP 服务器运行 tauri-pilot,而无需为每个命令单独调用:
```
{
"mcpServers": {
"tauri-pilot": {
"command": "tauri-pilot",
"args": ["mcp"]
}
}
}
```
MCP 服务器暴露了与 CLI 相同的功能接口:
`snapshot`、`click`、`fill`、`logs`、`network`、`eval`、`ipc`、`assert_*` 以及其他测试工具。
使用全局标志在 `mcp` 之前指定特定的应用套接字或窗口:
```
{
"mcpServers": {
"tauri-pilot": {
"command": "tauri-pilot",
"args": ["--socket", "/tmp/tauri-pilot-myapp.sock", "--window", "main", "mcp"]
}
}
}
```
## 要求
- **Linux**(WebKitGTK)或 **macOS**(WebKit)— Windows 计划支持
- **Tauri v2**(v1 不支持)
- **Rust 1.94.1+**(LTS,edition 2024)
## 谁在使用?
你正在使用 tauri-pilot 吗?[提交 PR](https://github.com/mpiton/tauri-pilot/pulls) 将你的项目添加到此列表!
## 许可证
MIT — 参见 [LICENSE](LICENSE)
标签:AI代理, CLI测试, JSON-RPC, Rust, SEO: AI测试工具, SEO: Tauri测试, SEO: 桌面应用调试, Syscall, Tauri, Tauri v2, Unix Socket, Web开发, 交互式测试, 前端自动化, 可视化界面, 威胁情报, 实时调试, 开发者工具, 插件开发, 文档结构分析, 桌面应用测试, 网络流量审计, 跨平台测试, 通知系统