# 执行计划 - 修复执行用例结果显示待执行且全部失败

> **文档类型**: 执行计划文档
> **创建日期**: 2026-07-15
> **作者**: czj
> **关联文档**: `_问题处理_执行用例结果显示待执行.md`
> **状态**: 待执行

---

## 一、改动总览

| # | 改动项 | 文件 | 说明 |
|---|--------|------|------|
| 1 | 用例执行顺序按模块+order排序 | `execution_service.py` | 创建执行时按模块分组排序用例 |
| 2 | 修复"等待主页加载"选择器 | 数据库（用例步骤） | 用 URL 变化判断替代 DOM 选择器 |
| 3 | 修复"退出登录"选择器 | 数据库（用例步骤） | 适配实际 DOM 结构 |

---

## 二、详细执行步骤

### Step 1：修复用例执行顺序

**文件**：`backend/app/services/execution_service.py`

**问题**：`create_execution` 中创建 `CaseResult` 时按 `case_ids` 顺序，而 `case_ids` 来自前端传入的用户勾选顺序，不保证首用例在前。

**方案**：创建执行时，先按模块分组，同模块内按 `test_case.order` 排序，确保每个模块的首用例（含登录）排在前面。

**改动位置**：`create_execution` 方法中，在创建 `CaseResult` 之前，对 `cases` 按模块+order 排序。

### Step 2：修复"等待主页加载"选择器

**问题**：当前选择器 `.el-menu, .sidebar-container, .home-container` 不匹配目标系统主页的实际 DOM。

**方案**：改用 URL 断言判断登录成功——登录后 URL 应从 `#/login` 变为不含 `login` 的路径。

**改动**：将所有首用例步骤 8"等待主页加载"的参数改为：

```json
{
  "order": 8,
  "name": "等待主页加载",
  "action": "assert",
  "params": {
    "type": "url",
    "expected": "#/"
  }
}
```

### Step 3：修复"退出登录"选择器

**问题**：`button:has-text("退出")` 和 `button:has-text("确定")` 找不到，说明退出登录流程可能是下拉菜单→点击退出→出现确认弹窗→点击确认。

**方案**：先看截图分析实际 DOM，再调整选择器。由于退出登录流程可能涉及多步操作，简化方案为：直接清除 cookies 导航回登录页（复用 `reset_login_state` 逻辑），而不是通过 UI 操作退出。

**改动**：将末用例的退出登录步骤改为导航到登录页（带 URL 参数），执行器会自动检测到登录页并重置 `_is_logged_in`：

```json
[
  {"order": 3, "name": "退出登录", "action": "navigate", "params": {"url": "https://192.168.5.44/#/login"}}
]
```

---

## 三、验证步骤

| 步骤 | 操作 | 预期结果 |
|------|------|----------|
| 1 | 全选会议管理用例执行 | 首用例（个人日程，含登录）第一个执行 |
| 2 | 首用例登录成功 | 步骤 8"等待主页加载"通过 |
| 3 | 后续用例复用登录态 | 从主页点击菜单成功 |
| 4 | 末用例退出登录 | 导航到登录页，`_is_logged_in` 重置 |
| 5 | 执行完成后查看结果 | 用例结果状态正确显示 |

---

*本文档由 Claude Code 生成，遵循项目执行计划文档规范。*
