| # 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]`占位符为真实的元素引用。每次测试前建议先获取快照以确认当前页面状态。 |