内容
# rf-test-videos — 手动测试视频转换为 Robot Framework 测试套件
将视频存放在 `videos/` 目录下,运行 `/video-to-rf` 命令,生成**业务测试计划**(`specs/` 目录下)和验证通过的 **Robot Framework 测试套件**;然后运行 `/finalize-rf` 命令,在被测系统(MCP 服务器 [rf-mcp](https://github.com/manykarim/rf-mcp))上提取定位器,并通过两次实际运行验证可重现性。
```text
视频 (.mp4) → /video-to-rf → specs/<slug>.md → tests/robot/ui/… (dry-run 通过)
→ 页面对象(定位器待完善)
→ /finalize-rf → 在 SUT 上提取定位器 → 2 次实际运行通过
→ 视频与执行的一致性:判决
在 spec 中 + 独立 HTML 报告
(results/fidelity/<slug>/report.html)
```
无需在捕获时进行任何 instrumentation:任何现有的视频(Teams、OBS、Game Bar)都可利用 — 这是目前已知的所有公共工具都无法涵盖的功能(详细比较:`docs/etat-de-l-art.md`)。
所有操作都在本地进行:使用 ffmpeg 进行图像分割,使用 faster-whisper 进行转录(无需外部音频发送),由 VS Code 的 AI 助手生成。支持 **Claude Code**(技能 `.claude/skills/`)和 **GitHub Copilot** 以代理模式(提示文件 `.github/prompts/`,需要视觉模型)。
## 安装(新环境,Windows)
```powershell
powershell -ExecutionPolicy Bypass -File scripts/setup.ps1
```
脚本创建 `.venv`,安装 `requirements.txt`,下载 Playwright 浏览器,并检查 ffmpeg(如果缺少则使用 `winget install ffmpeg`)。在 VS Code 中打开目录:推荐的扩展程序会自动提供,项目终端已预配置。第一次运行 `/video-to-rf` 会下载 whisper 模型(约 460 MB,仅一次)。
## 使用
| 助手 | 转录 | 在 SUT 上完成 |
| --- | --- | --- |
| Claude Code | `/video-to-rf videos/x.mp4 --language zh` | `/finalize-rf x`(MCP 服务器 `.mcp.json`,在会话启动时加载) |
| GitHub Copilot(代理模式) | `/video-to-rf videos/x.mp4 --language zh` | `/finalize-rf x`(MCP 服务器 `.vscode/mcp.json`,在 MCP 视图中启动) |
- **用户指南**(记录高质量视频、选项、连接 SUT、常见问题):`docs/guide-utilisateur.md`
- **约定和流程参考**(适用于助手和审阅者):`CLAUDE.md` — Copilot 说明(`.github/copilot-instructions.md`)引用了它。
## 质量
每次推送到 `main`(和每个 PR)都会触发 CI(`.github/workflows/ci.yml`):spec ↔ 套件可追溯性(`scripts/check_specs.py`),Robocop lint(`robocop.toml`)和所有套件的 `robot --dryrun`。相同的命令在本地运行:
```powershell
python scripts/check_specs.py # spec 和约定的 sha256
python scripts/inventory_pages.py # 可重用的关键词/定位器
$env:PYTHONIOENCODING='utf-8'; python -m robocop check tests resources
```
## 运行测试套件
```powershell
$env:PYTHONIOENCODING='utf-8'; robot -v "APP_PASSWORD:Secret:…" --outputdir results/x tests/robot/ui/web/x.robot
```
(在 VS Code 项目终端中,编码前缀是多余的 — 由 `.vscode/settings.json` 配置。密码始终通过 CLI 传递,从不写入文件。)