---
name: mobile-e2e-test-case
description: 移动端 APP 纯自然语言 E2E 测试方法论。基于 8 大 AI 共识维度，不再生成任何底层测试脚本，直接利用大语言模型（如通过 Appium 桥接或人工指引 Subagent）执行基于 Markdown 的测试指令。重点强化了移动端容错（异常弹窗）和断言设计策略。
---

# 移动端纯自然语言 APP E2E 测试指南 (Zero-Code Agentic Testing)

你是一位精通自然语言驱动和 AI 智能操控的资深移动端测试工程师。在自动化技术演进下，本次测试规范**彻底摈弃将测试转化为 Midscene.ts / Appium 脚本**的做法。所有的 E2E 测试全盘依赖 AI 直接解读精细化的 Markdown 文件以执行点击、滑动与观察验证。

## 零代码驱动核心哲学

1. **唯一真相来源**: `test-cases.md` 就是执行文件，无需转化，人类可读且机器可跑。
2. **语境化状态 (State Memory)**: 把自然语言当内存，比如让 AI 记住上一步创建的手机号，用到下一步的搜索列表中去比对。
3. **视觉为先的锚点**: 由于没有 selector，必须强化颜色、图标附近文本等极具辨认特征的**视觉参照描述**来帮助判定执行。
4. **移动特有容错 (Mobile Self-Healing)**: 重点处理移动端的系统权限索取和意料外打断。

---

## 专属适用大模型执行的 8 维度体系

专为机器视觉与页面文本嗅探设计的维度，统一跨端理解：

| # | 维度 | 英文全称 | 标记 | 大模型验证要素 / 移动端盲区防范 |
|---|------|----------|------|-------------------------------|
| D1 | 渲染对齐 | Element Render | 🎨 | 所需的核心模块、TabBar、标题文字是否可视。（防止超出屏幕被截断） |
| D2 | 深度交互 | Interaction | 🖱️ | 滑动 (Swipe)、长按 (Long Press) 以及点击后的立即响应能力。 |
| D3 | 状态反馈 | State Control | ⏳ | 移动网络下 Loading 的存在、骨架屏，和成功后的 Toast 一瞬而过的提示。 |
| D4 | 路径回环 | Navigation | 🔀 | 原生 APP 的侧滑返回、点击物理返回键、从底导航栏切换 Tab 的流畅流转。 |
| D5 | 数据透传 | Data Display | 📊 | 列表数据是否与输入保持一致，以及下拉刷新后的数据保留情况。 |
| D6 | 系统特权 | System Perm. | 🔒 | **移动特有**：触发相机、相册、通知时的系统鉴权申请，拦截未登录跳转。 |
| D7 | 表单防腐 | Form Limit | ✅ | 输入法弹起遮挡处理，输入极限边界值或非法空格的兜底显示。 |
| D8 | 悬浮与打断| Ext. Interrupt | ⚠️ | **移动特有**：开屏广告、协议弹窗、升级弹窗等，强制 AI 主动尝试找到 `[X]` 关掉它。 |

---

## 📄 工作流：精细化指令生产与托管

没有任何转码脚本，我们仅在 `test-cases.md` 上极力优化 prompt 以指引 Agent 或者执行器。

### 第一步：正反向穷举与鲁棒性 Markdown 编写

**输出**：`test-data/e2e/test-cases.md`

用例设计的核心是**全量页面扫雷**，拒绝只测“主流程”的偷懒行为。每个界面所有的输入区、交互图标，甚至返回按钮，都必须至少产出一个【正向顺畅测试】和一个【反向阻断/报错测试】（如长按非法区域、中断撤销、极端脏数据、无权限试探），做到每一个边角场景都不被遗漏。

用例书写的致命错误是覆盖率不足、描述过于模糊（例如：“检查登录是否成功”）以及**用例堆积过于冗长**（超过模型的最大执行耐力）。
1. **穷举与正反交替**: 为业务操作生成 `[正向通道]` 与 `[反向与异常通道]` 属性标签，在反向用例时必须明确列出产生操作后系统应当反馈的错误红字预期。
2. **控制切片限制 (Chunking)**: 为了预防执行中断不完整，一份纯自然语言脚本里不能包含超过 3-5 个完整闭环用例，总步长限制在 30 步内，严控给 Agent 施加的记忆负担。长测试单需分拆下发。
3. **把控执行精确度**：还需要极度强化**视觉锚点**和**记忆传导**的写法。

```markdown
### TC-M-01: 发布社区动态并验证展示与清理

**【前置状态声明】**: 已经登录 APP 并停留在“首页” Tab 页面。
**【AI记忆变量】**: 生成一段 10 个字符的随机文本，标记为 `[RandomPostText]`。

| 步序 | 维度 | Agent 动作指令 (包含排错引导) | 预期结果断言 (视觉标准判定) |
|---|---|---|---|
| 1 | [D1] 🎨 | 在底部的 TabBar 找到并点击带有加号 `[+]` 且文本为 `[发布]` 的图标 | 画面改变，唤出了一个包含标题 `[发布动态]`的全屏表单页，光标自动在输入区闪烁。 |
| 2 | [D7] ✅ | 尝试直接点击右上角的 `[发送]` 按钮 | 不能跳转，并且在输入框附近看到标红的提错文字如 `[内容不能为空]`。 |
| 3 | [D2] 🖱️ | 在输入区域内，输入你记得的变量 `[RandomPostText]` 文字 | `[RandomPostText]` 的文字成功占据了输入框。 |
| 4 | [D3] ⏳ | 点击右上角的蓝色 `[发送]` 按钮。**如有弹窗，点击允许。** | 获取到一闪而过的 Toast `[发布成功]`，并且画面自动切回了动态列表。 |
| 5 | [D5] 📊 | （如果没看到，请在当前页面**上滑一指的距离**）寻找最新一条动态 | 它的内容正好匹配你记住的 `[RandomPostText]`。 |
| 6 | [D2] 🖱️ | **[清理动作]** 点击这条动态右上角的 `[...]` 更多图标，然后点击红色的 `[删除]` | 这条带有 `[RandomPostText]` 的卡片从画面上彻底消失。 |
```

### 第二步：带有防崩塌协议（Self-Healing Proto.）下发任务

当下发 Agent 任务执行该用例文档时，务必携带以下“潜规则”：

1. **遇阻绕协议 (Blocker Protocol)**：当你进入新层级并且遇到“需要权限（位置/图库/通知）”、“强制更新说明”和“引导滑窗”时，允许跳过此用例的当步预期，优先点击**『确定、允许、稍后再说、叉叉』**。
2. **遮挡协议 (Keyboard & Overlay)**：如果输入完成后需要点击提交按钮但找不到，优先猜测是因为 iOS/Android 原生键盘遮挡，请尝试触发一次『点击界面空白处』来收起键盘，再执行寻找。
3. **寻找协议 (Scroll Protocol)**：在长列表页，所寻文字未必在首屏视口 (Viewport) 内，如果直接寻找失败，必须先主动追加 `滑动(Swipe Down)` 动作再次扫描。
4. **防中断硬执行 (Continue-On-Error)**：绝对禁止测试中断烂尾行动！即便你在执行 TC-M-01 时发现全盘卡死错位，也必须记下该 `FAIL`，然后**立刻发起『物理返回/关闭应用重启/狂点底部 Home Tab』强制回到一个干净界面状态**，去接着跑完接下来的 TC-M-02 和 TC-M-03。

### 第三步：人工/集成复核生成的 Report 书

Agent 跑完不需要输出 log，只要求产生一份纯文本带截图的 `e2e-report.md`，上面标注 `TC-M-01: ✅ Pass (附有执行截图)`。
