docs(windows): 补齐上游交付与测试工作流 (#67)

Co-authored-by: Cooper-X-Oak <Cooper-X-Oak@users.noreply.github.com>
This commit is contained in:
Cooper OakandCooper-X-Oak authored and GitHub committed 2026-04-30 14:25:51 +08:00
1 parent 848cfc35c8
commit 7797d1479a
3 files changed
+272

No files matched your search

@@ -0,0 +1,80 @@
on:
workflow_dispatch:
pull_request:
paths:
- ".github/workflows/webdriver-v2.yml"
- "v2/**"
name: WebDriver (v2)
jobs:
test:
name: Test
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, windows-latest]
webdriver-test: [selenium, webdriverio]
steps:
- uses: actions/checkout@v2
- name: install Tauri dependencies (Linux)
if: matrix.platform == 'ubuntu-latest'
run: >
sudo apt-get update &&
sudo apt-get install -y
webkit2gtk-4.1
libayatana-appindicator3-dev
webkit2gtk-driver
xvfb
- name: install msdgedriver (Windows)
if: matrix.platform == 'windows-latest'
run: |
cargo install --git https://github.com/chippers/msedgedriver-tool
& "$HOME/.cargo/bin/msedgedriver-tool.exe"
$PWD.Path >> $env:GITHUB_PATH
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: false
rustflags: ""
- uses: Swatinem/rust-cache@v2
with:
workspaces: v2/src-tauri
- uses: pnpm/action-setup@v4
with:
version: 10
- name: Node v20
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
cache-dependency-path: |
v2/pnpm-lock.yaml
v2/webdriver/${{ matrix.webdriver-test }}/pnpm-lock.yaml
- name: install dependencies
run: pnpm install
working-directory: v2
- name: Install tauri-driver
run: cargo install tauri-driver --locked
- name: run tests using ${{ matrix.webdriver-test }} (Linux)
if: matrix.platform == 'ubuntu-latest'
run: |
pnpm install
xvfb-run pnpm test
working-directory: v2/webdriver/${{ matrix.webdriver-test }}
- name: run tests using ${{ matrix.webdriver-test }} (Windows)
if: matrix.platform == 'windows-latest'
run: |
pnpm install
pnpm test
working-directory: v2/webdriver/${{ matrix.webdriver-test }}
+127
View File
@@ -0,0 +1,127 @@
# Windows Tauri 测试 Agent / Workflow 调研
## 背景
OpenLess 是 Tauri v2 + React/Vite + Rust 后端的桌面应用。Windows 真机问题主要集中在:
- 启动首屏:空边框、白屏、前端首帧前窗口过早显示。
- 系统能力:全局热键、麦克风隐私权限、剪贴板、前台输入框插入。
- 本地状态:凭据读写、历史记录、设置保存。
- 人工输入:物理热键无法用普通 synthetic SendInput 可靠替代。
## 可复用方案
### 1. 官方 tauri-driver + WebDriver
来源:
- https://v2.tauri.app/develop/tests/webdriver/
- https://github.com/tauri-apps/webdriver-example
适合做 CI 基线:
- 启动 Tauri 应用。
- 检查窗口出现、DOM 内容、按钮点击、设置页导航。
- Windows CI 可配 `msedgedriver`,Linux CI 可配 `webkit2gtk-driver + xvfb`。
参考 workflow:
- `tauri-apps/webdriver-example/.github/workflows/webdriver-v2.yml`
- 该 workflow 在 `ubuntu-latest` 和 `windows-latest` 上安装 `tauri-driver`,Windows 侧安装 `msedgedriver`,再分别跑 selenium / webdriverio 测试。
建议落地:
- 先选 WebdriverIO,生态和断言更贴近前端团队。
- 新增 `openless -all/app/webdriver/`,覆盖:
- 应用启动后 1 秒内出现 OpenLess UI。
- 设置页提供商字段能读出已存在凭据的“非空状态”。
- 打开设置页不会把未修改字段写回空值。
- 权限页 Windows 文案不出现 macOS 辅助功能授权提示。
### 2. tauri-plugin-playwright
来源:
- https://docs.rs/crate/tauri-plugin-playwright/0.1.0
适合做更接近 Playwright 的 E2E:
- 在 Tauri app 内嵌控制 server。
- 使用 Playwright API 做页面级断言。
- 对前端团队迁移成本较低。
风险:
- 需要引入 Tauri plugin,测试入口和生产入口要隔离。
- 目前生态成熟度低于官方 WebDriver。
建议落地:
- 暂不作为第一阶段 CI 基线。
- 等 WebDriver 跑通后,再评估是否用它补截图、网络、前端状态断言。
### 3. Tauri MCP / AI Agent 调试插件
来源:
- https://github.com/P3GLEG/tauri-plugin-mcp
- https://github.com/dirvine/tauri-mcp
适合做 agent 辅助调试:
- 截图。
- 窗口管理。
- DOM 读取。
- 鼠标/键盘输入。
- localStorage 检查。
风险:
- 需要在 app 中接入调试插件,必须确保只在 dev/test 构建启用。
- 不适合直接放进 production bundle。
建议落地:
- 可以做 `devtools/agent` 分支实验。
- 目标是让 Codex/Claude/Cursor 能直接看 Tauri 窗口截图和 DOM,降低“用户肉眼测试”的比例。
### 4. TestDriver AI
来源:
- https://testdriver.ai/vscode
- https://github.com/testdriverai/testdriverai
适合黑盒探索:
- 用自然语言描述流程。
- 支持桌面应用、Windows、GitHub Actions。
- 能生成测试报告/视频。
风险:
- 外部服务/账号/成本依赖。
- 对本项目当前开源 CI 基线不应作为唯一门禁。
建议落地:
- 作为 nightly 或人工触发探索测试,不作为 PR 必过的第一层。
- 可覆盖“打开 OpenLess Dev、进入设置、检查凭据字段非空、按热键后胶囊状态变化”等高层流程。
## 推荐实施顺序
1. 保留现有 PowerShell smoke:构建、启动、进程响应、hotkey listener 日志。
2. 增加 WebDriverIO 基线:窗口、DOM、设置页、凭据字段非空状态、Windows 文案。
3. 增加 Windows 手动门禁脚本:物理热键、真实 ASR、Notepad fallback、麦克风隐私开关。
4. 评估 Tauri MCP:给 agent 提供截图/DOM/输入能力,减少人工描述。
5. 评估 TestDriver AI:做黑盒探索和视频报告。
## 第一批必须补的测试
- 启动首屏不能先显示空窗口边框。
- Windows 启动不等待麦克风 input stream 探测。
- 设置页凭据字段加载完成前 blur 不会保存空值。
- 设置页打开后不修改字段,`credentials.json` 不发生变化。
- `get_credentials` 与 `read_credential` 对同一文件返回一致状态。
- 右 Control 默认热键文案在概览、历史、设置中一致。
- Windows 权限页不显示 macOS 辅助功能授权引导。
+65
View File
@@ -0,0 +1,65 @@
# Windows upstream PR workflow
## 目标
Windows 主线先在 `fork/dev` 完成发现、修复、CI、自审和复审,再收敛成明确 upstream 维护项。不要把未收敛的真机 findings 直接写到 upstream issues 或 upstream PR。
## 标准流程
1. 在 `fork/dev` 修复问题。
- 每个提交只解决一个明确问题。
- findings 先写到本地记录或 fork issue。
- 不向 upstream 新增噪声 issue。
2. 在 `fork/dev` 触发 CI。
- Windows build 必须过。
- 新增/修改的 Windows smoke 必须能在本机复跑。
- 真实凭据、物理热键、ASR、插入 fallback 等不能完全 CI 化的项目,要留下本机证据路径和日志摘要。
3. 在 fork 上开自有 PR。
- base: `fork/dev`
- head: 功能分支
- PR 描述使用中文,按模板填写。
- PR 必须包含 fork CI 链接、真机回归摘要、自审结论。
4. 复审 fork PR。
- 先按 code review 方式找阻断项。
- 修完 review findings 后再次跑 fork CI。
- 只有 fork PR 复审通过,才能进入 upstream 收敛。
5. 收敛 upstream 维护项。
- 从 fork PR 中拆出最小 upstream 维护切片。
- upstream PR 只包含已验证的最小改动。
- upstream PR 描述必须带 fork PR / fork CI 链接,说明该切片来自已验证的 `fork/dev` 工作流。
- upstream issue 只用于已经确认、可维护、可复现、需要 upstream 跟踪的问题;不要把探索期 findings 扔到 upstream。
## upstream PR 进入条件
- `fork/dev` 已包含修复。
- fork PR 已通过 CI。
- fork PR 已完成自审和复审。
- upstream 分支从最新 upstream base 切出。
- upstream diff 能独立解释,不依赖 fork/dev 的其他未提交上下文。
- PR 描述包含:
- 单一目标
- 不包含范围
- fork PR 链接
- fork CI 链接
- 本机 Windows 回归证据
## 禁止项
- 禁止从未验证的本地 finding 直接创建 upstream issue。
- 禁止绕过 fork/dev CI 直接推 upstream PR。
- 禁止把多个 Windows 真机问题混成一个 upstream PR。
- 禁止在 upstream PR 中提交真实服务凭据、用户本地配置、构建产物或临时目录。
## 当前执行规则
后续 Windows 主线默认顺序为:
```text
fork/dev 修复 -> fork/dev CI -> fork PR -> 自审/复审 -> upstream 最小 PR
```
如果 upstream PR 需要更新,先确认对应 fork PR 和 fork CI 证据,再同步 upstream PR。