ModalTranscriberMCP / tests /playwright_mcp_testing_guide.md
richard-su's picture
Upload folder using huggingface_hub
76f9cd2 verified
# Playwright MCP Testing Guide for Gradio UI
本文档详细说明如何使用Playwright MCP工具测试`src/ui/gradio_ui.py`中的所有功能。
## 📋 目录
1. [测试环境设置](#测试环境设置)
2. [基本MCP工具使用](#基本mcp工具使用)
3. [Tab 1: Podcast Download 测试](#tab-1-podcast-download-测试)
4. [Tab 2: Audio Transcription 测试](#tab-2-audio-transcription-测试)
5. [Tab 3: MP3 File Management 测试](#tab-3-mp3-file-management-测试)
6. [Tab 4: Transcription Text Management 测试](#tab-4-transcription-text-management-测试)
7. [完整测试流程示例](#完整测试流程示例)
8. [故障排除](#故障排除)
## 测试环境设置
### 1. 启动应用
```bash
# 确保应用在localhost:8000运行
python app.py
```
### 2. 初始化浏览器
```python
# 导航到应用
mcp_playwright_browser_navigate("http://localhost:8000")
# 等待页面加载
mcp_playwright_browser_wait_for(time=3)
# 获取页面快照以查看当前状态
mcp_playwright_browser_snapshot()
```
## 基本MCP工具使用
### 核心工具列表
- `mcp_playwright_browser_navigate(url)` - 导航到URL
- `mcp_playwright_browser_snapshot()` - 获取页面快照
- `mcp_playwright_browser_click(element, ref)` - 点击元素
- `mcp_playwright_browser_type(element, ref, text)` - 输入文本
- `mcp_playwright_browser_select_option(element, ref, values)` - 选择下拉选项
- `mcp_playwright_browser_wait_for(time=seconds)` - 等待指定时间
- `mcp_playwright_browser_wait_for(text="显示文本")` - 等待文本出现
### 基本测试模式
1. 获取快照 → 找到元素ref → 执行操作 → 验证结果
## Tab 1: Podcast Download 测试
### 界面元素映射
- **播客链接输入框**: `role='textbox', name='Podcast Link'`
- **平台选择**: `role='radio', name='Apple Podcast'` / `role='radio', name='XiaoYuZhou'`
- **自动转录复选框**: `role='checkbox', name='Auto-transcribe after download'`
- **说话人识别复选框**: `role='checkbox', name='Enable speaker diarization'`
- **下载按钮**: `role='button', name='📥 Start Download'`
### 测试用例 1: Apple Podcast 下载 + 转录 + 说话人识别
```python
# 1. 导航到Podcast Download tab (默认已选中)
mcp_playwright_browser_snapshot()
# 2. 输入Apple Podcast URL
mcp_playwright_browser_type(
element="播客链接输入框",
ref="[从snapshot获取的ref]",
text="https://podcasts.apple.com/cn/podcast/all-ears-english-podcast/id751574016?i=1000712048662"
)
# 3. 确保Apple Podcast已选中(默认)
# 如果需要选择:
# mcp_playwright_browser_click(element="Apple Podcast选项", ref="[ref]")
# 4. 确保自动转录已启用(默认启用)
# 如果需要切换:
# mcp_playwright_browser_click(element="自动转录复选框", ref="[ref]")
# 5. 启用说话人识别
mcp_playwright_browser_click(element="说话人识别复选框", ref="[ref]")
# 6. 开始下载
mcp_playwright_browser_click(element="开始下载按钮", ref="[ref]")
# 7. 等待处理完成(可能需要2-5分钟)
mcp_playwright_browser_wait_for(time=180) # 等待3分钟
# 8. 检查结果
mcp_playwright_browser_snapshot()
# 查看result_output区域是否显示成功结果
```
### 测试用例 2: XiaoYuZhou 下载 + 仅下载
```python
# 1. 切换到XiaoYuZhou平台
mcp_playwright_browser_click(element="XiaoYuZhou选项", ref="[ref]")
# 2. 输入XiaoYuZhou URL
mcp_playwright_browser_type(
element="播客链接输入框",
ref="[ref]",
text="https://www.xiaoyuzhoufm.com/episode/your-episode-id"
)
# 3. 禁用自动转录
mcp_playwright_browser_click(element="自动转录复选框", ref="[ref]")
# 4. 开始下载
mcp_playwright_browser_click(element="开始下载按钮", ref="[ref]")
# 5. 等待下载完成
mcp_playwright_browser_wait_for(time=60)
# 6. 验证结果
mcp_playwright_browser_snapshot()
```
## Tab 2: Audio Transcription 测试
### 界面元素映射
- **Tab切换**: `role='tab', name='Audio Transcription'`
- **文件路径输入**: `role='textbox', name='Audio File Path'`
- **模型选择**: `role='combobox', name='Model Size'`
- **语言选择**: `role='combobox', name='Language'`
- **输出格式**: `role='radio', name='srt'/'txt'/'json'`
- **说话人识别**: `role='checkbox', name='Enable speaker diarization'`
- **转录按钮**: `role='button', name='🎤 Start Transcription'`
### 测试用例 1: 转录下载的音频文件
```python
# 1. 切换到Audio Transcription tab
mcp_playwright_browser_click(element="Audio Transcription tab", ref="[ref]")
# 2. 输入音频文件路径(使用之前下载的文件)
mcp_playwright_browser_type(
element="音频文件路径输入框",
ref="[ref]",
text="downloads/1000712048662_episode_audio.mp3"
)
# 3. 选择模型大小
mcp_playwright_browser_select_option(
element="模型大小下拉框",
ref="[ref]",
values=["turbo"]
)
# 4. 选择语言
mcp_playwright_browser_select_option(
element="语言下拉框",
ref="[ref]",
values=["auto"]
)
# 5. 选择输出格式为SRT
mcp_playwright_browser_click(element="SRT格式选项", ref="[ref]")
# 6. 启用说话人识别
mcp_playwright_browser_click(element="说话人识别复选框", ref="[ref]")
# 7. 开始转录
mcp_playwright_browser_click(element="开始转录按钮", ref="[ref]")
# 8. 等待转录完成
mcp_playwright_browser_wait_for(time=120)
# 9. 检查结果
mcp_playwright_browser_snapshot()
```
### 测试用例 2: 不同参数组合测试
```python
# 测试不同模型大小
for model in ["small", "medium", "large"]:
mcp_playwright_browser_select_option(
element="模型大小下拉框",
ref="[ref]",
values=[model]
)
# 执行转录并验证结果
# 测试不同输出格式
for format in ["txt", "json"]:
mcp_playwright_browser_click(element=f"{format}格式选项", ref="[ref]")
# 执行转录并验证结果
```
## Tab 3: MP3 File Management 测试
### 界面元素映射
- **Tab切换**: `role='tab', name='MP3 File Management'`
- **目录选择**: `role='combobox', name='Directory Path'`
- **文件列表**: `role='textbox', name='MP3 File List'`
### 测试用例: 浏览MP3文件
```python
# 1. 切换到MP3 File Management tab
mcp_playwright_browser_click(element="MP3 File Management tab", ref="[ref]")
# 2. 选择目录
mcp_playwright_browser_select_option(
element="目录路径下拉框",
ref="[ref]",
values=["/root/cache/apple_podcasts"]
)
# 3. 等待文件列表更新
mcp_playwright_browser_wait_for(time=2)
# 4. 检查文件列表
mcp_playwright_browser_snapshot()
# 5. 切换到另一个目录
mcp_playwright_browser_select_option(
element="目录路径下拉框",
ref="[ref]",
values=["/root/cache/xyz_podcasts"]
)
# 6. 验证文件列表更新
mcp_playwright_browser_wait_for(time=2)
mcp_playwright_browser_snapshot()
```
## Tab 4: Transcription Text Management 测试
### 界面元素映射
- **Tab切换**: `role='tab', name='Transcription Text Management'`
- **文件路径输入**: `role='textbox', name='File Path'`
- **加载文件按钮**: `role='button', name='📂 Load File'`
- **保存文件按钮**: `role='button', name='💾 Save File'`
- **刷新按钮**: `role='button', name='🔄 Refresh'`
- **内容编辑器**: `role='textbox', name='File Content'`
- **上一个按钮**: `role='button', name='⬅️ Previous'`
- **下一个按钮**: `role='button', name='➡️ Next'`
### 测试用例 1: 加载和编辑转录文件
```python
# 1. 切换到Text Management tab
mcp_playwright_browser_click(element="Transcription Text Management tab", ref="[ref]")
# 2. 输入转录文件路径
mcp_playwright_browser_type(
element="文件路径输入框",
ref="[ref]",
text="downloads/1000712048662_episode_audio.srt"
)
# 3. 加载文件
mcp_playwright_browser_click(element="加载文件按钮", ref="[ref]")
# 4. 等待文件加载
mcp_playwright_browser_wait_for(time=3)
# 5. 检查文件内容
mcp_playwright_browser_snapshot()
# 6. 编辑内容
mcp_playwright_browser_type(
element="内容编辑器",
ref="[ref]",
text="编辑后的内容..."
)
# 7. 保存文件
mcp_playwright_browser_click(element="保存文件按钮", ref="[ref]")
# 8. 验证保存状态
mcp_playwright_browser_wait_for(time=2)
mcp_playwright_browser_snapshot()
```
### 测试用例 2: 分段阅读大文件
```python
# 1. 使用下一个按钮浏览文件
mcp_playwright_browser_click(element="下一个按钮", ref="[ref]")
mcp_playwright_browser_wait_for(time=2)
mcp_playwright_browser_snapshot()
# 2. 使用上一个按钮返回
mcp_playwright_browser_click(element="上一个按钮", ref="[ref]")
mcp_playwright_browser_wait_for(time=2)
mcp_playwright_browser_snapshot()
# 3. 刷新文件内容
mcp_playwright_browser_click(element="刷新按钮", ref="[ref]")
mcp_playwright_browser_wait_for(time=2)
mcp_playwright_browser_snapshot()
```
## 完整测试流程示例
### 端到端测试流程
```python
# 完整的端到端测试流程
def complete_e2e_test():
# Phase 1: 下载播客
print("=== Phase 1: Podcast Download ===")
mcp_playwright_browser_navigate("http://localhost:8000")
mcp_playwright_browser_snapshot()
# 输入URL并配置选项
mcp_playwright_browser_type(
element="播客链接输入框",
ref="[ref]",
text="https://podcasts.apple.com/cn/podcast/all-ears-english-podcast/id751574016?i=1000712048662"
)
# 启用说话人识别
mcp_playwright_browser_click(element="说话人识别复选框", ref="[ref]")
# 开始下载
mcp_playwright_browser_click(element="开始下载按钮", ref="[ref]")
# 等待完成
mcp_playwright_browser_wait_for(time=180)
# Phase 2: 验证下载结果并管理文件
print("=== Phase 2: File Management ===")
mcp_playwright_browser_click(element="MP3 File Management tab", ref="[ref]")
mcp_playwright_browser_snapshot()
# Phase 3: 手动转录测试
print("=== Phase 3: Manual Transcription ===")
mcp_playwright_browser_click(element="Audio Transcription tab", ref="[ref]")
# 使用不同参数进行转录
mcp_playwright_browser_type(
element="音频文件路径输入框",
ref="[ref]",
text="downloads/1000712048662_episode_audio.mp3"
)
# 测试不同模型
mcp_playwright_browser_select_option(
element="模型大小下拉框",
ref="[ref]",
values=["medium"]
)
mcp_playwright_browser_click(element="开始转录按钮", ref="[ref]")
mcp_playwright_browser_wait_for(time=120)
# Phase 4: 文本管理和编辑
print("=== Phase 4: Text Management ===")
mcp_playwright_browser_click(element="Transcription Text Management tab", ref="[ref]")
# 加载和编辑转录文件
mcp_playwright_browser_type(
element="文件路径输入框",
ref="[ref]",
text="downloads/1000712048662_episode_audio.srt"
)
mcp_playwright_browser_click(element="加载文件按钮", ref="[ref]")
mcp_playwright_browser_wait_for(time=3)
mcp_playwright_browser_snapshot()
print("=== 测试完成 ===")
# 执行完整测试
complete_e2e_test()
```
## 故障排除
### 常见问题和解决方案
1. **元素未找到**
- 先使用`mcp_playwright_browser_snapshot()`获取当前页面状态
- 确认元素的正确ref和描述
- 检查页面是否完全加载
2. **操作超时**
- 增加等待时间:`mcp_playwright_browser_wait_for(time=更长时间)`
- 检查网络连接和服务状态
- 验证Modal endpoints是否正常工作
3. **文件路径错误**
- 确认文件实际存在于指定路径
- 使用绝对路径而非相对路径
- 检查文件权限
4. **表单提交失败**
- 确认所有必填字段已填写
- 检查输入格式是否正确
- 验证服务器端错误日志
### 调试技巧
1. **逐步执行**
```python
# 在每个关键步骤后添加快照
mcp_playwright_browser_snapshot()
```
2. **等待策略**
```python
# 等待特定文本出现
mcp_playwright_browser_wait_for(text="Processing completed")
# 等待特定文本消失
mcp_playwright_browser_wait_for(textGone="Loading...")
```
3. **错误恢复**
```python
# 如果操作失败,刷新页面重试
mcp_playwright_browser_navigate("http://localhost:8000")
```
## 测试数据
### 推荐的测试URL
**Apple Podcast URLs:**
- 短音频: `https://podcasts.apple.com/cn/podcast/short-episode-id`
- 中等音频: `https://podcasts.apple.com/cn/podcast/all-ears-english-podcast/id751574016?i=1000712048662`
- 长音频: `https://podcasts.apple.com/cn/podcast/long-episode-id`
**XiaoYuZhou URLs:**
- 测试URL: `https://www.xiaoyuzhoufm.com/episode/test-episode-id`
### 测试文件路径
- 音频文件: `downloads/*.mp3`
- 转录文件: `downloads/*.srt`, `downloads/*.txt`
- JSON文件: `downloads/*.json`
---
**注意**: 在使用此指南时,需要根据实际的页面快照结果替换`[ref]`占位符为真实的元素引用。每次测试前建议先获取快照以确认当前页面状态。