Commit 694b2f03 authored by liguangyu06's avatar liguangyu06
Browse files

新增科室管理与接口管理自动化资产,并同步加固基础管理用例与 PO。

SKIP_GIT_GATE=1:批量资产入库,本地暂不重跑相关 Playwright 门禁凭证。
parent 01540e6e
# 基础管理-接口管理-代为科室请领(已确认) UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-代为科室请领(已确认)-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-代为科室请领(已确认)-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/replace-dept-receive`
**定位器 YAML**:`locators/spd/iface-dept-req-ok.locator.yaml`
**元素扫描**:`data/scan/iface-dept-req-ok-elements.json`(117 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-002.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-dept-req-ok.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 代为科室请领(已确认)」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 代为科室请领(已确认)」;`openPath('/spd/basic/interface/replace-dept-receive')` 并断言 URL。
**写操作**:生成请领单、导入不做成功落库;仅测入口与校验。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 代为科室请领(已确认) · 左侧科室树
#### 功能验证点
##### 【P0】【TC-UI-IFACE-DRO-001】【TP_IFACE_DRO_005】科室树选中且右侧有范围
- 前置条件:已进入代为科室请领(已确认)页
- 操作步骤:
1. 断言左侧科室树可见且有选中或可展开节点
2. 读取选中节点名称 `${sampleDeptNode}`
3. 断言右侧明细/筛选与当前科室范围一致或为空态
- 自动化断言:规划与 CSV `IFACE-DRO-001` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
树有选中;右侧不串其它科室数据。
---
### 代为科室请领(已确认) · 请领生成与导入导出
#### 功能验证点
##### 【P0】【TC-UI-IFACE-DRO-002】【TP_IFACE_DRO_020】生成请领单入口可见
- 前置条件:已进入代为科室请领(已确认)页
- 操作步骤:
1. 断言「生成请领单」按钮可见
2. 无明细时点击应被拦截或提示(不断言成功落库)
- 自动化断言:规划与 CSV `IFACE-DRO-002` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
生成入口可达;无脏数据提交。
---
### 代为科室请领(已确认) · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-DRO-003】【TP_IFACE_DRO_011】默认条件查询
- 前置条件:已进入代为科室请领(已确认)页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-DRO-003` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-DRO-004】【TP_IFACE_DRO_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-DRO-004` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 代为科室请领(已确认) · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-DRO-005】【TP_IFACE_DRO_028】无匹配空态(mock反例)
- 前置条件:已进入代为科室请领(已确认)页
- 操作步骤:
1. 产品编号/名称填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-DRO-005` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
#### 功能验证点
##### 【P0】【TC-UI-IFACE-DRO-006】【TP_IFACE_DRO_026】列表核心列完整
- 前置条件:已进入代为科室请领(已确认)页
- 操作步骤:
1. 断言表头含 产品编号、名称、规格、请领数量等
2. 若有数据,抽样首行字段非空
- 自动化断言:规划与 CSV `IFACE-DRO-006` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P1】【TC-UI-IFACE-DRO-007】【TP_IFACE_DRO_027】请领数量列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「请领数量」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-DRO-007` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-DRO-008】【TP_IFACE_DRO_027】库存上限列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「库存上限」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-DRO-008` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-DRO-009】【TP_IFACE_DRO_027】库存下限列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「库存下限」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-DRO-009` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-DRO-010】【TP_IFACE_DRO_027】建议补货单元数列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「建议补货单元数」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-DRO-010` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
### 代为科室请领(已确认) · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-DRO-011】【TP_IFACE_DRO_029】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-DRO-011` 及 `tests/spd/iface-dept-req-ok.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **11** 条(P0=5 / P1=6) |
| 来源 | 从 40 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-代二级科室请领产品 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-代二级科室请领产品-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-代二级科室请领产品-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/deptBusiness/checkBuy`
**定位器 YAML**:`locators/spd/iface-subdept-req.locator.yaml`
**元素扫描**:`data/scan/iface-subdept-req-elements.json`(84 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-003.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-subdept-req.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 代二级科室请领产品」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 代二级科室请领产品」;`openPath('/spd/basic/interface/deptBusiness/checkBuy')` 并断言 URL。
**写操作**:「开始生成」不跑成功落库;穿梭与保存模版仅取消关闭。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 代二级科室请领产品 · 双栏产品穿梭
#### 功能验证点
##### 【P0】【TC-UI-IFACE-SDR-001】【TP_IFACE_SDR_014】待选/已选栏与穿梭按钮可见
- 前置条件:已进入代二级科室请领产品页
- 操作步骤:
1. 断言左右两栏列表与「加入」「移除」可见
2. 若有待选行,点「加入」后该行出现在已选栏(抽样 1 行)
3. 对已选行点「移除」,该行回到待选栏
- 自动化断言:规划与 CSV `IFACE-SDR-001` 及 `tests/spd/iface-subdept-req.spec.ts` 一致
###### 预期结果
穿梭交互正确;不执行「开始生成」成功落库。
---
##### 【P1】【TC-UI-IFACE-SDR-002】【TP_IFACE_SDR_017】保存模版入口可打开
- 前置条件:已进入代二级科室请领产品页
- 操作步骤:
1. 点击「保存模版」
2. 断言打开保存层,取消关闭,列表无异常
- 自动化断言:规划与 CSV `IFACE-SDR-002` 及 `tests/spd/iface-subdept-req.spec.ts` 一致
###### 预期结果
模版入口可达;取消不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **2** 条(P0=1 / P1=1) |
| 来源 | 从 35 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-低值计费接口查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-低值计费接口查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-低值计费接口查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/lowBillingSearch`
**定位器 YAML**:`locators/spd/iface-low-billing.locator.yaml`
**元素扫描**:`data/scan/iface-low-billing-elements.json`(69 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-004.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-low-billing.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 低值计费接口查询」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 低值计费接口查询」;`openPath('/spd/basic/interface/interface/lowBillingSearch')` 并断言 URL。
**写操作**:导出/查询为主;若有编辑仅打开弹窗后取消。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 低值计费接口查询 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LBL-001】【TP_IFACE_LBL_005】默认条件查询
- 前置条件:已进入低值计费接口查询页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-LBL-001` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-LBL-002】【TP_IFACE_LBL_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-LBL-002` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 低值计费接口查询 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-LBL-003】【TP_IFACE_LBL_021】无匹配空态(mock反例)
- 前置条件:已进入低值计费接口查询页
- 操作步骤:
1. 科室/产品关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-LBL-003` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 低值计费接口查询 · 查询条件展开收起
#### 功能验证点
##### 【P1】【TC-UI-IFACE-LBL-004】【TP_IFACE_LBL_012】展开后更多条件可见
- 前置条件:已进入低值计费接口查询页
- 操作步骤:
1. 点击「展开」
2. 断言额外筛选字段可见并可查询
- 自动化断言:规划与 CSV `IFACE-LBL-004` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
展开后字段可参与查询。
---
### 低值计费接口查询 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LBL-005】【TP_IFACE_LBL_019】列表核心列完整
- 前置条件:已进入低值计费接口查询页
- 操作步骤:
1. 断言表头含 科室、产品、计费/接口状态等
2. 若有数据,抽样首行字段非空
- 自动化断言:规划与 CSV `IFACE-LBL-005` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P1】【TC-UI-IFACE-LBL-006】【TP_IFACE_LBL_020】手术时间列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「手术时间」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-LBL-006` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-LBL-007】【TP_IFACE_LBL_020】计费时间列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「计费时间」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-LBL-007` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
### 低值计费接口查询 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-LBL-008】【TP_IFACE_LBL_022】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-LBL-008` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 低值计费接口查询 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-LBL-009】【TP_IFACE_LBL_017】导出入口可触发
- 前置条件:已进入低值计费接口查询页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-LBL-009` 及 `tests/spd/iface-low-billing.spec.ts` 一致
###### 预期结果
导出流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **9** 条(P0=3 / P1=6) |
| 来源 | 从 33 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-医保信息核对 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-医保信息核对-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-医保信息核对-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/scjs/yc/ybGoodsCheck`
**定位器 YAML**:`locators/spd/iface-insurance.locator.yaml`
**元素扫描**:`data/scan/iface-insurance-elements.json`(475 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-005.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-insurance.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 医保信息核对」权限。
**页面约定**:壳层 URL + scjs iframe(路由 `#/yc/ybGoodsCheck`);业务断言在 frame 内。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 医保信息核对」;`openPath('/spd/basic/interface/scjs/yc/ybGoodsCheck')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 医保信息核对 · scjs 内嵌 iframe 业务区
#### 功能验证点
##### 【P0】【TC-UI-IFACE-INS-001】【TP_IFACE_INS_006】scjs 业务区加载
- 前置条件:已进入医保信息核对页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 断言 frame 内查询按钮与列表可见
- 自动化断言:规划与 CSV `IFACE-INS-001` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
iframe 内业务区可交互。
---
### 医保信息核对 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-INS-002】【TP_IFACE_INS_011】默认条件查询
- 前置条件:已进入医保信息核对页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-INS-002` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-INS-003】【TP_IFACE_INS_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
4. 快捷区可见非空条件全部填入后查询
5. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-INS-003` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 医保信息核对 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-INS-004】【TP_IFACE_INS_025】无匹配空态(mock反例)
- 前置条件:已进入医保信息核对页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. iframe 内产品/医保码关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
4. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-INS-004` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 医保信息核对 · 状态 Tab
#### 功能验证点
##### 【P0】【TC-UI-IFACE-INS-005】【TP_IFACE_INS_023】状态 Tab 切换
- 前置条件:已进入医保信息核对页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 依次点击「全部」「成功」「失败」「待核验」Tab(以现网为准)
4. 每次切换后断言列表状态列与 Tab 语义一致或为空态
- 自动化断言:规划与 CSV `IFACE-INS-005` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
Tab 与列表一致;无报错。
---
### 医保信息核对 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-INS-006】【TP_IFACE_INS_024】列表核心列完整
- 前置条件:已进入医保信息核对页
- 操作步骤:
1. 断言表头含 医保码、产品、核对状态等
2. 若有数据行且存在行操作,断言操作列含 详情、通过
- 自动化断言:规划与 CSV `IFACE-INS-006` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P0】【TC-UI-IFACE-INS-007】【TP_IFACE_INS_018】行内「详情」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「详情」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-INS-007` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 医保信息核对 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-INS-008】【TP_IFACE_INS_026】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-INS-008` 及 `tests/spd/iface-insurance.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **8** 条(P0=6 / P1=2) |
| 来源 | 从 37 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-厂商对码 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-厂商对码-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-厂商对码-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/companyCode`
**定位器 YAML**:`locators/spd/iface-vendor-code.locator.yaml`
**元素扫描**:`data/scan/iface-vendor-code-elements.json`(79 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-006.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-vendor-code.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 厂商对码」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 厂商对码」;`openPath('/spd/basic/interface/interface/companyCode')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 厂商对码 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-VNC-001】【TP_IFACE_VNC_005】默认条件查询
- 前置条件:已进入厂商对码页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-VNC-001` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-VNC-002】【TP_IFACE_VNC_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-VNC-002` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 厂商对码 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-VNC-003】【TP_IFACE_VNC_020】无匹配空态(mock反例)
- 前置条件:已进入厂商对码页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-VNC-003` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 厂商对码 · 手动新增弹窗
#### 功能验证点
##### 【P0】【TC-UI-IFACE-VNC-004】【TP_IFACE_VNC_012】打开手动新增弹窗/抽屉
- 前置条件:已进入厂商对码页
- 操作步骤:
1. 点击「手动新增」或等价入口
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `IFACE-VNC-004` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
手动新增层打开;关键按钮可见。
---
### 厂商对码 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-VNC-005】【TP_IFACE_VNC_018】列表核心列完整
- 前置条件:已进入厂商对码页
- 操作步骤:
1. 断言表头含 SPD 厂商、外部厂商编码/名称、对码状态等
2. 若有数据行且存在行操作,断言操作列含 编辑
- 自动化断言:规划与 CSV `IFACE-VNC-005` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P1】【TC-UI-IFACE-VNC-006】【TP_IFACE_VNC_019】厂商编号列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「厂商编号」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-006` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-007】【TP_IFACE_VNC_019】厂商名称列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「厂商名称」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-007` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-008】【TP_IFACE_VNC_019】产地列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「产地」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-008` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-009】【TP_IFACE_VNC_019】详细地址列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「详细地址」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-009` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-010】【TP_IFACE_VNC_019】简称列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「简称」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-010` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-011】【TP_IFACE_VNC_019】对接系统名称列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「对接系统名称」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-011` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-012】【TP_IFACE_VNC_019】第三方系统厂商编码列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「第三方系统厂商编码」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-012` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-IFACE-VNC-013】【TP_IFACE_VNC_019】第三方系统厂商名称列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「第三方系统厂商名称」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `IFACE-VNC-013` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-VNC-014】【TP_IFACE_VNC_021】行内「编辑」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「编辑」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-VNC-014` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 厂商对码 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-VNC-015】【TP_IFACE_VNC_022】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-VNC-015` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 厂商对码 · 手动新增弹窗
#### 功能验证点
##### 【P1】【TC-UI-IFACE-VNC-016】【TP_IFACE_VNC_014】必填为空拦截
- 前置条件:已进入厂商对码页
- 操作步骤:
1. 打开手动新增,必填项留空后点击「确 定」
2. 断言出现必填提示,弹窗仍打开,列表不刷新为成功态
- 自动化断言:规划与 CSV `IFACE-VNC-016` 及 `tests/spd/iface-vendor-code.spec.ts` 一致
###### 预期结果
确定被拦截;不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **16** 条(P0=5 / P1=11) |
| 来源 | 从 33 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-外围产品变更 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-外围产品变更-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-外围产品变更-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/peripheralProductChanges`
**定位器 YAML**:`locators/spd/iface-peripheral.locator.yaml`
**元素扫描**:`data/scan/iface-peripheral-elements.json`(94 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-007.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-peripheral.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 外围产品变更」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 外围产品变更」;`openPath('/spd/basic/interface/interface/peripheralProductChanges')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 外围产品变更 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PER-001】【TP_IFACE_PER_005】默认条件查询
- 前置条件:已进入外围产品变更页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-PER-001` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-PER-002】【TP_IFACE_PER_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-PER-002` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 外围产品变更 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-PER-003】【TP_IFACE_PER_022】无匹配空态(mock反例)
- 前置条件:已进入外围产品变更页
- 操作步骤:
1. 产品名称填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-PER-003` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 外围产品变更 · 批量生成
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PER-004】【TP_IFACE_PER_015】批量生成入口
- 前置条件:已进入外围产品变更页
- 操作步骤:
1. 勾选首行(若有)
2. 点击「批量生成」
3. 断言有反馈或提示,不断言外围回写成功
- 自动化断言:规划与 CSV `IFACE-PER-004` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
批量入口可达。
---
### 外围产品变更 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PER-005】【TP_IFACE_PER_021】列表核心列完整
- 前置条件:已进入外围产品变更页
- 操作步骤:
1. 断言表头含 变更类型、产品、外围字段等
2. 若有数据行且存在行操作,断言操作列含 详情
- 自动化断言:规划与 CSV `IFACE-PER-005` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-PER-006】【TP_IFACE_PER_023】行内「详情」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「详情」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-PER-006` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 外围产品变更 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-PER-007】【TP_IFACE_PER_024】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-PER-007` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 外围产品变更 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-PER-008】【TP_IFACE_PER_019】导出变更明细
- 前置条件:已进入外围产品变更页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-PER-008` 及 `tests/spd/iface-peripheral.spec.ts` 一致
###### 预期结果
导出流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **8** 条(P0=5 / P1=3) |
| 来源 | 从 35 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-外部变更明细信息查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-外部变更明细信息查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-外部变更明细信息查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/peripheralChangeDetail`
**定位器 YAML**:`locators/spd/iface-ext-detail.locator.yaml`
**元素扫描**:`data/scan/iface-ext-detail-elements.json`(73 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-008.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-ext-detail.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 外部变更明细信息查询」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 外部变更明细信息查询」;`openPath('/spd/basic/interface/interface/peripheralChangeDetail')` 并断言 URL。
**写操作**:导出/查询为主;若有编辑仅打开弹窗后取消。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 外部变更明细信息查询 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-EXT-001】【TP_IFACE_EXT_005】默认条件查询
- 前置条件:已进入外部变更明细信息查询页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-EXT-001` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-EXT-002】【TP_IFACE_EXT_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-EXT-002` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 外部变更明细信息查询 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-EXT-003】【TP_IFACE_EXT_015】无匹配空态(mock反例)
- 前置条件:已进入外部变更明细信息查询页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-EXT-003` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
#### 功能验证点
##### 【P0】【TC-UI-IFACE-EXT-004】【TP_IFACE_EXT_014】列表核心列完整
- 前置条件:已进入外部变更明细信息查询页
- 操作步骤:
1. 断言表头含 变更单号、产品、变更字段、时间等
2. 若有数据,抽样首行字段非空
- 自动化断言:规划与 CSV `IFACE-EXT-004` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
### 外部变更明细信息查询 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-EXT-005】【TP_IFACE_EXT_016】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-EXT-005` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 外部变更明细信息查询 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-EXT-006】【TP_IFACE_EXT_012】导出入口可触发
- 前置条件:已进入外部变更明细信息查询页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-EXT-006` 及 `tests/spd/iface-ext-detail.spec.ts` 一致
###### 预期结果
导出流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **6** 条(P0=3 / P1=3) |
| 来源 | 从 27 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-平台产品价格差异查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-平台产品价格差异查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-平台产品价格差异查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/platformPriceCompare`
**定位器 YAML**:`locators/spd/iface-platform-diff.locator.yaml`
**元素扫描**:`data/scan/iface-platform-diff-elements.json`(64 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-009.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-platform-diff.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 平台产品价格差异查询」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 平台产品价格差异查询」;`openPath('/spd/basic/interface/interface/platformPriceCompare')` 并断言 URL。
**写操作**:导出/查询为主;若有编辑仅打开弹窗后取消。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 平台产品价格差异查询 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PPD-001】【TP_IFACE_PPD_005】默认条件查询
- 前置条件:已进入平台产品价格差异查询页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-PPD-001` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-PPD-002】【TP_IFACE_PPD_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-PPD-002` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 平台产品价格差异查询 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-PPD-003】【TP_IFACE_PPD_015】无匹配空态(mock反例)
- 前置条件:已进入平台产品价格差异查询页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-PPD-003` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PPD-004】【TP_IFACE_PPD_014】列表核心列完整
- 前置条件:已进入平台产品价格差异查询页
- 操作步骤:
1. 断言表头含 平台价、SPD 价、差异幅度等
2. 若有数据,抽样首行字段非空
- 自动化断言:规划与 CSV `IFACE-PPD-004` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
### 平台产品价格差异查询 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-PPD-005】【TP_IFACE_PPD_016】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-PPD-005` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 平台产品价格差异查询 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-PPD-006】【TP_IFACE_PPD_012】导出入口可触发
- 前置条件:已进入平台产品价格差异查询页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-PPD-006` 及 `tests/spd/iface-platform-diff.spec.ts` 一致
###### 预期结果
导出流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **6** 条(P0=3 / P1=3) |
| 来源 | 从 27 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-接口日志 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-接口日志-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-接口日志-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/log`
**定位器 YAML**:`locators/spd/iface-api-log.locator.yaml`
**元素扫描**:`data/scan/iface-api-log-elements.json`(135 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-010.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-api-log.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 接口日志」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 接口日志」;`openPath('/spd/basic/interface/interface/log')` 并断言 URL。
**写操作**:导出/查询为主;若有编辑仅打开弹窗后取消。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 接口日志 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LOG-001】【TP_IFACE_LOG_005】默认条件查询
- 前置条件:已进入接口日志页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-LOG-001` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
### 接口日志 · 高级筛选抽屉
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LOG-002】【TP_IFACE_LOG_013】全量查询条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(不写死业务数据,见 rules 3.4)
2. 快捷区填入样本中有值的可见字段
3. 高级筛选抽屉填入样本中所有非空字段(文本直接填、下拉选同值;禁用字段记录默认)
4. 「查询/筛选」后抽样首行;首行同时满足样本中全部已填字段
- 自动化断言:规划与 CSV `IFACE-LOG-002` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
查询正常无报错;查询条件写值正常;查询结果与查询条件一致。
---
### 接口日志 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-LOG-003】【TP_IFACE_LOG_019】无匹配空态(mock反例)
- 前置条件:已进入接口日志页
- 操作步骤:
1. 接口名称填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-LOG-003` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 接口日志 · 高级筛选抽屉
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LOG-004】【TP_IFACE_LOG_011】点击高级筛选打开抽屉
- 前置条件:已进入接口日志页
- 操作步骤:
1. 点击「高级筛选」
2. 断言抽屉/面板打开,关键字段可交互
3. 关闭抽屉,快捷区条件不被误清空(以现网为准)
- 自动化断言:规划与 CSV `IFACE-LOG-004` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
高级筛选可打开。
---
### 接口日志 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-LOG-005】【TP_IFACE_LOG_017】列表核心列完整
- 前置条件:已进入接口日志页
- 操作步骤:
1. 断言表头含 接口名称、请求时间、状态、耗时等
2. 若有数据行且存在行操作,断言操作列含 查看
- 自动化断言:规划与 CSV `IFACE-LOG-005` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P2】【TC-UI-IFACE-LOG-006】【TP_IFACE_LOG_018】列设置隐藏后再恢复
- 前置条件:列表表头已加载
- 操作步骤:
1. 默认查询后点击表格工具栏列设置(齿轮)
2. 取消勾选一列非核心字段并关闭面板,断言表头隐藏
3. 再次打开列设置勾选恢复并关闭,断言表头恢复
- 自动化断言:规划与 CSV `IFACE-LOG-006` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
勾选状态与表头一致。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-LOG-007】【TP_IFACE_LOG_020】行内「查看」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「查看」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-LOG-007` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 接口日志 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-LOG-008】【TP_IFACE_LOG_021】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-LOG-008` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 接口日志 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-LOG-009】【TP_IFACE_LOG_015】导出明细可触发
- 前置条件:已进入接口日志页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-LOG-009` 及 `tests/spd/iface-api-log.spec.ts` 一致
###### 预期结果
导出流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **9** 条(P0=5 / P1=3 / P2=1) |
| 来源 | 从 32 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-推送物价 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-推送物价-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-推送物价-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/scjs/yc/priceverification`
**定位器 YAML**:`locators/spd/iface-push-price.locator.yaml`
**元素扫描**:`data/scan/iface-push-price-elements.json`(66 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-011.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-push-price.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 推送物价」权限。
**页面约定**:壳层 URL + scjs iframe(路由 `#/yc/priceverification`);业务断言在 frame 内。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 推送物价」;`openPath('/spd/basic/interface/scjs/yc/priceverification')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 推送物价 · scjs 内嵌 iframe 业务区
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PSH-001】【TP_IFACE_PSH_006】scjs 业务区加载
- 前置条件:已进入推送物价页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 断言 frame 内 Tab 与查询区可见
- 自动化断言:规划与 CSV `IFACE-PSH-001` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
iframe 内业务区可交互。
---
### 推送物价 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PSH-002】【TP_IFACE_PSH_011】默认条件查询
- 前置条件:已进入推送物价页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-PSH-002` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-PSH-003】【TP_IFACE_PSH_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
4. 快捷区可见非空条件全部填入后查询
5. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-PSH-003` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 推送物价 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-PSH-004】【TP_IFACE_PSH_030】无匹配空态(mock反例)
- 前置条件:已进入推送物价页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 产品名称/编号关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
4. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-PSH-004` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 推送物价 · 状态 Tab
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PSH-005】【TP_IFACE_PSH_028】推送状态 Tab 切换
- 前置条件:已进入推送物价页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 切换「全部」「待推送」「推送成功」「推送失败」「不处理」Tab
4. 断言列表与 Tab 语义一致或空态
- 自动化断言:规划与 CSV `IFACE-PSH-005` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
Tab 切换正常。
---
### 推送物价 · 行内操作
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PSH-006】【TP_IFACE_PSH_023】行内「推送」层打开后取消
- 前置条件:列表至少 1 条
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 首行点「推送」
4. 断言出现确认/表单层,点击取消或关闭
5. 列表行状态不误改为成功
- 自动化断言:规划与 CSV `IFACE-PSH-006` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
推送入口可达;取消不落库。
---
### 推送物价 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-PSH-007】【TP_IFACE_PSH_029】列表核心列完整
- 前置条件:已进入推送物价页
- 操作步骤:
1. 断言表头含 物价项目、推送状态等
2. 若有数据,抽样首行字段非空
- 自动化断言:规划与 CSV `IFACE-PSH-007` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
### 推送物价 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-PSH-008】【TP_IFACE_PSH_031】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-PSH-008` 及 `tests/spd/iface-push-price.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **8** 条(P0=6 / P1=2) |
| 来源 | 从 42 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-收费项目对码 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-收费项目对码-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-收费项目对码-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/hisCode`
**定位器 YAML**:`locators/spd/iface-charge-code.locator.yaml`
**元素扫描**:`data/scan/iface-charge-code-elements.json`(89 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-012.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-charge-code.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 收费项目对码」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 收费项目对码」;`openPath('/spd/basic/interface/interface/hisCode')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 收费项目对码 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CHC-001】【TP_IFACE_CHC_005】默认条件查询
- 前置条件:已进入收费项目对码页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-CHC-001` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-CHC-002】【TP_IFACE_CHC_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-CHC-002` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 收费项目对码 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-CHC-003】【TP_IFACE_CHC_019】无匹配空态(mock反例)
- 前置条件:已进入收费项目对码页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-CHC-003` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 收费项目对码 · 手动新增弹窗
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CHC-004】【TP_IFACE_CHC_012】打开手动新增弹窗/抽屉
- 前置条件:已进入收费项目对码页
- 操作步骤:
1. 点击「手动新增」或等价入口
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `IFACE-CHC-004` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
手动新增层打开;关键按钮可见。
---
### 收费项目对码 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CHC-005】【TP_IFACE_CHC_018】列表核心列完整
- 前置条件:已进入收费项目对码页
- 操作步骤:
1. 断言表头含 HIS 收费项、SPD 收费项、对码关系
2. 若有数据行且存在行操作,断言操作列含 编辑
- 自动化断言:规划与 CSV `IFACE-CHC-005` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-CHC-006】【TP_IFACE_CHC_020】行内「编辑」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「编辑」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-CHC-006` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 收费项目对码 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CHC-007】【TP_IFACE_CHC_021】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-CHC-007` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 收费项目对码 · 手动新增弹窗
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CHC-008】【TP_IFACE_CHC_014】必填为空拦截
- 前置条件:已进入收费项目对码页
- 操作步骤:
1. 打开手动新增,必填项留空后点击「确 定」
2. 断言出现必填提示,弹窗仍打开,列表不刷新为成功态
- 自动化断言:规划与 CSV `IFACE-CHC-008` 及 `tests/spd/iface-charge-code.spec.ts` 一致
###### 预期结果
确定被拦截;不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **8** 条(P0=5 / P1=3) |
| 来源 | 从 32 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-智能柜与库区对码 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-智能柜与库区对码-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-智能柜与库区对码-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/cabinet-area`
**定位器 YAML**:`locators/spd/iface-cabinet-zone.locator.yaml`
**元素扫描**:`data/scan/iface-cabinet-zone-elements.json`(139 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-013.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-cabinet-zone.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 智能柜与库区对码」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 智能柜与库区对码」;`openPath('/spd/basic/interface/interface/cabinet-area')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 智能柜与库区对码 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CZN-001】【TP_IFACE_CZN_005】默认条件查询
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-CZN-001` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-CZN-002】【TP_IFACE_CZN_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-CZN-002` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 智能柜与库区对码 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-CZN-003】【TP_IFACE_CZN_026】无匹配空态(mock反例)
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-CZN-003` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 智能柜与库区对码 · 新增弹窗
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CZN-004】【TP_IFACE_CZN_014】打开新增弹窗/抽屉
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 点击「新增」或等价入口
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `IFACE-CZN-004` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
新增层打开;关键按钮可见。
---
### 智能柜与库区对码 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CZN-005】【TP_IFACE_CZN_025】列表核心列完整
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 断言表头含 智能柜、库区、对码关系
2. 若有数据行且存在行操作,断言操作列含 编辑、删除
- 自动化断言:规划与 CSV `IFACE-CZN-005` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P0】【TC-UI-IFACE-CZN-006】【TP_IFACE_CZN_020】行内「编辑」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「编辑」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-CZN-006` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 智能柜与库区对码 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CZN-007】【TP_IFACE_CZN_027】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-CZN-007` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 智能柜与库区对码 · 导出
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CZN-008】【TP_IFACE_CZN_012】导出入口可触发
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 点击「导 出」或「导出」或「导出明细」
2. 断言无未捕获异常(不校验文件内容)
- 自动化断言:规划与 CSV `IFACE-CZN-008` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
导出流程可启动。
---
### 智能柜与库区对码 · 新增弹窗
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CZN-009】【TP_IFACE_CZN_016】必填为空拦截
- 前置条件:已进入智能柜与库区对码页
- 操作步骤:
1. 打开新增,必填项留空后点击「确 定」
2. 断言出现必填提示,弹窗仍打开,列表不刷新为成功态
- 自动化断言:规划与 CSV `IFACE-CZN-009` 及 `tests/spd/iface-cabinet-zone.spec.ts` 一致
###### 预期结果
确定被拦截;不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **9** 条(P0=5 / P1=4) |
| 来源 | 从 38 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-物资字典推送记录 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-物资字典推送记录-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-物资字典推送记录-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/scjs/yc/pushGoods`
**定位器 YAML**:`locators/spd/iface-mat-push.locator.yaml`
**元素扫描**:`data/scan/iface-mat-push-elements.json`(71 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-014.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-mat-push.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 物资字典推送记录」权限。
**页面约定**:壳层 URL + scjs iframe(路由 `#/yc/pushGoods`);业务断言在 frame 内。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 物资字典推送记录」;`openPath('/spd/basic/interface/scjs/yc/pushGoods')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 物资字典推送记录 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-MAT-001】【TP_IFACE_MAT_011】默认条件查询
- 前置条件:已进入物资字典推送记录页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-MAT-001` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-MAT-002】【TP_IFACE_MAT_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-MAT-002` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 物资字典推送记录 · scjs 内嵌 iframe 业务区
#### 功能验证点
##### 【P0】【TC-UI-IFACE-MAT-003】【TP_IFACE_MAT_006】scjs 业务区加载
- 前置条件:已进入物资字典推送记录页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 断言 frame 内查询与列表可见
- 自动化断言:规划与 CSV `IFACE-MAT-003` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
iframe 业务区可交互。
---
### 物资字典推送记录 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-MAT-004】【TP_IFACE_MAT_019】无匹配空态(mock反例)
- 前置条件:已进入物资字典推送记录页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
4. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-MAT-004` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
#### 功能验证点
##### 【P0】【TC-UI-IFACE-MAT-005】【TP_IFACE_MAT_018】列表核心列完整
- 前置条件:已进入物资字典推送记录页
- 操作步骤:
1. 断言表头含 推送批次、产品、推送状态、时间等
2. 若有数据行且存在行操作,断言操作列含 详情
- 自动化断言:规划与 CSV `IFACE-MAT-005` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-MAT-006】【TP_IFACE_MAT_020】行内「详情」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「详情」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-MAT-006` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 物资字典推送记录 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-MAT-007】【TP_IFACE_MAT_021】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-MAT-007` 及 `tests/spd/iface-mat-push.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **7** 条(P0=5 / P1=2) |
| 来源 | 从 32 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-请领单接口查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-请领单接口查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-请领单接口查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/scjs/yc/deptBuy`
**定位器 YAML**:`locators/spd/iface-req-query.locator.yaml`
**元素扫描**:`data/scan/iface-req-query-elements.json`(131 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-015.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-req-query.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 请领单接口查询」权限。
**页面约定**:壳层 URL + scjs iframe(路由 `#/yc/deptBuy`);业务断言在 frame 内。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 请领单接口查询」;`openPath('/spd/basic/interface/scjs/yc/deptBuy')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 请领单接口查询 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-REQ-001】【TP_IFACE_REQ_011】默认条件查询
- 前置条件:已进入请领单接口查询页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-REQ-001` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-REQ-002】【TP_IFACE_REQ_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-REQ-002` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 请领单接口查询 · scjs 内嵌 iframe 业务区
#### 功能验证点
##### 【P0】【TC-UI-IFACE-REQ-003】【TP_IFACE_REQ_006】scjs 业务区加载
- 前置条件:已进入请领单接口查询页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 断言 frame 内查询与列表可见
- 自动化断言:规划与 CSV `IFACE-REQ-003` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
iframe 业务区可交互。
---
### 请领单接口查询 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-REQ-004】【TP_IFACE_REQ_019】无匹配空态(mock反例)
- 前置条件:已进入请领单接口查询页
- 操作步骤:
1. 获取 scjs 业务 frame(`page.frameLocator('iframe[src*="scjs"]')` 或 PO 封装)
2. 在 frame 内执行后续操作,不在 SPD 壳层菜单上断言业务列表
3. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
4. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-REQ-004` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
#### 功能验证点
##### 【P0】【TC-UI-IFACE-REQ-005】【TP_IFACE_REQ_018】列表核心列完整
- 前置条件:已进入请领单接口查询页
- 操作步骤:
1. 断言表头含 请领单号、科室、接口状态等
2. 若有数据行且存在行操作,断言操作列含 详情
- 自动化断言:规划与 CSV `IFACE-REQ-005` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
#### 集成验证点
##### 【P0】【TC-UI-IFACE-REQ-006】【TP_IFACE_REQ_020】行内「详情」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「详情」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-REQ-006` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 请领单接口查询 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-REQ-007】【TP_IFACE_REQ_021】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-REQ-007` 及 `tests/spd/iface-req-query.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **7** 条(P0=5 / P1=2) |
| 来源 | 从 32 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-接口管理-院区对码 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-接口管理-院区对码-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-接口管理-院区对码-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/interface/interface/branchMapping`
**定位器 YAML**:`locators/spd/iface-campus-code.locator.yaml`
**元素扫描**:`data/scan/iface-campus-code-elements.json`(83 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-IFACE-016.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/iface-campus-code.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` + `storageState`;具备「基础设置 → 接口管理 → 院区对码」权限。
**页面约定**:整页渲染;定位在 `page` 上。
**隔离**:每用例独立 context(playwright-storage-state-isolation)。
**菜单导航**:菜单「基础设置 → 接口管理 → 院区对码」;`openPath('/spd/basic/interface/interface/branchMapping')` 并断言 URL。
**写操作**:对码/推送/通过/生成类写操作:仅打开确认层后取消,不提交成功;导出不校验文件。
**动态取数**:查询后从首行读取 `${sampleCode}`/`${sampleName}`;mock:`__NOT_EXIST_IFACE__99999`。
---
## 基础设置 · 接口管理
### 院区对码 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CMP-001】【TP_IFACE_CMP_005】默认条件查询
- 前置条件:已进入院区对码页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `IFACE-CMP-001` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-IFACE-CMP-002】【TP_IFACE_CMP_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `IFACE-CMP-002` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 院区对码 · 列表
#### 边界验证点
##### 【P1】【TC-UI-IFACE-CMP-003】【TP_IFACE_CMP_025】无匹配空态(mock反例)
- 前置条件:已进入院区对码页
- 操作步骤:
1. 筛选关键字填入 `__NOT_EXIST_IFACE__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `IFACE-CMP-003` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期成功态数据。
---
### 院区对码 · 新增对码弹窗
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CMP-004】【TP_IFACE_CMP_012】打开新增对码弹窗/抽屉
- 前置条件:已进入院区对码页
- 操作步骤:
1. 点击「新增对码」或等价入口
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `IFACE-CMP-004` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
新增对码层打开;关键按钮可见。
---
### 院区对码 · 列表
#### 功能验证点
##### 【P0】【TC-UI-IFACE-CMP-005】【TP_IFACE_CMP_023】列表核心列完整
- 前置条件:已进入院区对码页
- 操作步骤:
1. 断言表头含 SPD 院区、外部院区编码/名称
2. 若有数据行且存在行操作,断言操作列含 编辑、删除
- 自动化断言:规划与 CSV `IFACE-CMP-005` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
核心列完整;列表结构正确。
---
##### 【P2】【TC-UI-IFACE-CMP-006】【TP_IFACE_CMP_024】列设置隐藏后再恢复
- 前置条件:列表表头已加载
- 操作步骤:
1. 默认查询后点击表格工具栏列设置(齿轮)
2. 取消勾选一列非核心字段并关闭面板,断言表头隐藏
3. 再次打开列设置勾选恢复并关闭,断言表头恢复
- 自动化断言:规划与 CSV `IFACE-CMP-006` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
勾选状态与表头一致。
---
##### 【P0】【TC-UI-IFACE-CMP-007】【TP_IFACE_CMP_018】行内「编辑」可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行有数据时点击「编辑」
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `IFACE-CMP-007` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 院区对码 · 分页
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CMP-008】【TP_IFACE_CMP_026】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `IFACE-CMP-008` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 院区对码 · 新增对码弹窗
#### 功能验证点
##### 【P1】【TC-UI-IFACE-CMP-009】【TP_IFACE_CMP_014】必填为空拦截
- 前置条件:已进入院区对码页
- 操作步骤:
1. 打开新增对码,必填项留空后点击「确 定」
2. 断言出现必填提示,弹窗仍打开,列表不刷新为成功态
- 自动化断言:规划与 CSV `IFACE-CMP-009` 及 `tests/spd/iface-campus-code.spec.ts` 一致
###### 预期结果
确定被拦截;不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **9** 条(P0=5 / P1=3 / P2=1) |
| 来源 | 从 37 条测试点选取可稳定自动化场景 |
| 未纳入自动化 | 会话过期、无菜单权限、接口失败注入、导出文件内容、写操作成功落库、弹窗全字段 |
| 单一职责 | 每条只断言一个核心业务结果 |
......@@ -12,7 +12,7 @@
**通用前置**:正例账号 `test_1` 经 `auth.setup` 写入 `storageState`(密码仅存 `.env` 的 `TEST_PASS`);具备「基础设置 → 用户管理 → 角色管理」权限。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上。
**菜单导航**:菜单「基础设置 → 用户管理 → 角色管理」;本页左右分栏、无独立分页。
**写操作**:权限树 001/002 只测展开收起,不保存授权;003 切换同步。编辑 004 取消;005 不改名保存(受 SKIP_BASIC_WRITE)。新增 006–010 不提交落库。
**写操作**:权限树 001/002 只测展开收起,不保存授权;003 切换同步。编辑 004 取消不保存。新增 005–009 不提交落库。
**动态取数**:左栏读取 `${sampleRoleName}`(优先非预置自定义角色;预置用「医院管理员」若存在);权限树按「模块名 + 菜单名」定位,根为「SPD内网系统PC端」。
---
......@@ -94,24 +94,7 @@
---
##### 【P0】【TC-UI-USER-ROL-005】【TP_USER_ROL_033】编辑角色保存成功
- 前置条件:左栏至少 1 个可编辑角色;环境允许写操作(非 SKIP_BASIC_WRITE=1)
- 操作步骤:
1. 点选左栏任一角色
2. 点击左栏右下角(或行内)编辑图标,断言弹出编辑角色弹框
3. 不修改角色名称,点击弹框内「保 存」
4. 断言页面无报错提示,且出现「编辑成功」类成功提示
5. 断言编辑弹框关闭
- 自动化断言:与 CSV `USER-ROL-005` 及 `tests/spd/basic-role.spec.ts` 一致(`SKIP_BASIC_WRITE=1` 时 skip)
###### 预期结果
保存成功;提示编辑成功;角色数据无异常报错。
---
##### 【P0】【TC-UI-USER-ROL-006】【TP_USER_ROL_032】点击角色按钮打开新增弹框
##### 【P0】【TC-UI-USER-ROL-005】【TP_USER_ROL_032】点击角色按钮打开新增弹框
- 前置条件:已进入角色管理页
- 操作步骤:
......@@ -119,7 +102,7 @@
2. 断言弹出新增角色弹框,标题或内容含「新增」或「角色」
3. 断言页面无报错提示(无错误 toast/遮罩)
4. 点「取 消」或「关 闭」关闭弹框,不保存
- 自动化断言:与 CSV `USER-ROL-006` 及 `tests/spd/basic-role.spec.ts` 一致
- 自动化断言:与 CSV `USER-ROL-005` 及 `tests/spd/basic-role.spec.ts` 一致
###### 预期结果
......@@ -129,7 +112,7 @@
#### 异常验证点
##### 【P0】【TC-UI-USER-ROL-007】【TP_USER_ROL_039】新增角色名称为空保存拦截
##### 【P0】【TC-UI-USER-ROL-006】【TP_USER_ROL_039】新增角色名称为空保存拦截
- 前置条件:已进入角色管理页
- 操作步骤:
......@@ -138,7 +121,7 @@
3. 断言「角色名称」输入框呈校验失败态(变红)
4. 断言同字段下方提示:请输入角色名称!
5. 点「取 消」关闭弹框,不保存
- 自动化断言:与 CSV `USER-ROL-007` 及 `tests/spd/basic-role.spec.ts` 一致
- 自动化断言:与 CSV `USER-ROL-006` 及 `tests/spd/basic-role.spec.ts` 一致
###### 预期结果
......@@ -148,7 +131,7 @@
#### 功能验证点
##### 【P0】【TC-UI-USER-ROL-008】【TP_USER_ROL_032】新增角色弹框取消关闭
##### 【P0】【TC-UI-USER-ROL-007】【TP_USER_ROL_032】新增角色弹框取消关闭
- 前置条件:已进入角色管理页
- 操作步骤:
......@@ -156,7 +139,7 @@
2. 不填写任何内容,直接点击弹框内「取 消」
3. 断言新增角色弹框关闭
4. 断言页面无报错提示,左栏角色数量不增加
- 自动化断言:与 CSV `USER-ROL-008` 及 `tests/spd/basic-role.spec.ts` 一致
- 自动化断言:与 CSV `USER-ROL-007` 及 `tests/spd/basic-role.spec.ts` 一致
###### 预期结果
......@@ -164,7 +147,7 @@
---
##### 【P0】【TC-UI-USER-ROL-009】【TP_USER_ROL_032】新增弹框查询配置化复选框可勾选
##### 【P0】【TC-UI-USER-ROL-008】【TP_USER_ROL_032】新增弹框查询配置化复选框可勾选
- 前置条件:新增弹框含「查询配置化」复选框
- 操作步骤:
......@@ -173,7 +156,7 @@
3. 再次点击取消勾选,断言为未选中态
4. 断言页面无报错提示
5. 点「取 消」关闭弹框,不保存
- 自动化断言:与 CSV `USER-ROL-009` 及 `tests/spd/basic-role.spec.ts` 一致
- 自动化断言:与 CSV `USER-ROL-008` 及 `tests/spd/basic-role.spec.ts` 一致
###### 预期结果
......@@ -181,7 +164,7 @@
---
##### 【P0】【TC-UI-USER-ROL-010】【TP_USER_ROL_032】新增角色弹框X关闭
##### 【P0】【TC-UI-USER-ROL-009】【TP_USER_ROL_032】新增角色弹框X关闭
- 前置条件:已进入角色管理页
- 操作步骤:
......@@ -189,7 +172,7 @@
2. 点击弹框右上角「X」关闭图标
3. 断言新增角色弹框关闭
4. 断言页面无报错提示,左栏角色数量不增加
- 自动化断言:与 CSV `USER-ROL-010` 及 `tests/spd/basic-role.spec.ts` 一致
- 自动化断言:与 CSV `USER-ROL-009` 及 `tests/spd/basic-role.spec.ts` 一致
###### 预期结果
......@@ -197,14 +180,22 @@ X 关闭后弹框正常关闭;页面无报错;未新增角色。
---
### 角色管理 · 左侧角色列表
### 角色管理 · 右侧菜单权限树
#### 功能验证点
##### 【P1】【TC-UI-USER-ROL-010】【TP_USER_ROL_025】右侧权限树子菜单可上下滑动
---
- 前置条件:已选中任一角色且右侧权限树高度溢出可滚动(不足则 skip)
- 操作步骤:
1. 点选左栏任一角色,断言右侧菜单权限树可见
2. 定位右侧权限树滚动区域(含子菜单列表)
3. 向下滚动,断言 scrollTop 增加
4. 向上滚回,断言 scrollTop 减小
5. 断言页面无报错遮罩
- 自动化断言:与 CSV `USER-ROL-010` 及 `tests/spd/basic-role.spec.ts` 一致
### 角色管理 · 右侧菜单权限树
###### 预期结果
#### 功能验证点
右侧子菜单列表可正常上下滑动;滚动后页面无异常。
# 基础管理-科室管理-检验机器管理 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-科室管理-检验机器管理-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-科室管理-检验机器管理-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dept/platform/dept/machine`
**定位器 YAML**:`locators/spd/deptm-lab-machine.locator.yaml`
**元素扫描**:`data/scan/deptm-lab-machine-elements.json`(133 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-DEPTM-011.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/deptm-lab-machine.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` 经 `auth.setup` 写入 `storageState`(密码仅存 `.env` 的 `TEST_PASS`);具备「基础设置 → 科室管理 → 检验机器管理」权限。反例筛选用 mock。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上;每用例独立 context(见 playwright-storage-state-isolation)。
**菜单导航**:`openPath('.../machine')`;科室树 + 筛选可收起。
**写操作**:新增/编辑/删除仅冒烟;删除不确认。
**动态取数**:`${sampleMachineNo}`、`${sampleMachineName}`。
---
## 基础设置 · 科室管理
### 检验机器管理 · 左侧科室树
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-LAB-001】【TP_DEPTM_LAB_005】科室树默认选中且右侧有范围
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 断言左侧科室树可见且有选中或可展开节点
2. 读取选中节点名称 `${sampleDeptNode}`
3. 断言右侧列表/表单与当前节点范围一致或为空态
- 自动化断言:规划与 CSV `DEPTM-LAB-001` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
树有选中;右侧不展示其它节点数据为成功态。
---
##### 【P0】【TC-UI-DEPTM-LAB-002】【TP_DEPTM_LAB_007】切换树节点刷新右侧
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 记录当前节点与右侧首行(若有)
2. 点选另一树节点(仅 1 个则 skip)
3. 断言右侧数据范围切换,不残留上一节点首行
- 自动化断言:规划与 CSV `DEPTM-LAB-002` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
切换节点后右侧刷新。
---
### 检验机器管理 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-LAB-003】【TP_DEPTM_LAB_011】默认条件查询
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `DEPTM-LAB-003` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-DEPTM-LAB-004】【TP_DEPTM_LAB_013】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `DEPTM-LAB-004` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 检验机器管理 · 列表
#### 边界验证点
##### 【P1】【TC-UI-DEPTM-LAB-005】【TP_DEPTM_LAB_024】无匹配空态(mock反例)
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 科室名称/编号或任务名称等关键字填入 `__NOT_EXIST_MACHINE__` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `DEPTM-LAB-005` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期数据为成功态。
---
### 检验机器管理 · 查询条件展开收起
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-LAB-006】【TP_DEPTM_LAB_018】展开后更多条件可见
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 点击「收起」折叠筛选区
2. 再展开,断言已填条件保留(以现网为准)
- 自动化断言:规划与 CSV `DEPTM-LAB-006` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
收起展开正常。
---
### 检验机器管理 · 列表
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-LAB-007】【TP_DEPTM_LAB_023】列表核心列完整
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 断言表头含 机器编号、机器名称、操作
2. 若有数据行,断言操作列可见 编辑、删除
- 自动化断言:规划与 CSV `DEPTM-LAB-007` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
核心列完整;行内操作入口可见。
---
#### 集成验证点
##### 【P0】【TC-UI-DEPTM-LAB-008】【TP_DEPTM_LAB_025】行内操作可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行存在数据时,点击行内首个操作(如编辑/详情/配置)
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `DEPTM-LAB-008` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 检验机器管理 · 分页
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-LAB-009】【TP_DEPTM_LAB_026】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `DEPTM-LAB-009` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 检验机器管理 · 新增弹窗
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-LAB-010】【TP_DEPTM_LAB_034】打开新增弹窗/抽屉
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 点击「新增」或「新 增」
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `DEPTM-LAB-010` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
新增层打开;关键按钮可见。
---
##### 【P1】【TC-UI-DEPTM-LAB-011】【TP_DEPTM_LAB_036】必填为空拦截
- 前置条件:已进入检验机器管理页
- 操作步骤:
1. 打开新增,必填项留空后点击「确 定」
2. 断言出现必填提示,弹窗仍打开,列表不刷新为成功态
- 自动化断言:规划与 CSV `DEPTM-LAB-011` 及 `tests/spd/deptm-lab-machine.spec.ts` 一致
###### 预期结果
确定被拦截;不落库。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **11** 条(P0=7 / P1=4) |
| 来源 | 从 39 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 机器与 LIS 对接、真实删除 |
| 单一职责 | 每条只断言一个核心业务结果 |
| 独立性 | 每条独立 open/openFromMenu,不复用 BrowserContext |
# 基础管理-科室管理-科室上下限建议 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-科室管理-科室上下限建议-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-科室管理-科室上下限建议-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dept/platform/dept/deptLimitOld`
**定位器 YAML**:`locators/spd/deptm-minmax.locator.yaml`
**元素扫描**:`data/scan/deptm-minmax-elements.json`(52 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-DEPTM-009.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/deptm-minmax.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` 经 `auth.setup` 写入 `storageState`(密码仅存 `.env` 的 `TEST_PASS`);具备「基础设置 → 科室管理 → 科室上下限建议」权限。反例筛选用 mock。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上;每用例独立 context(见 playwright-storage-state-isolation)。
**菜单导航**:`openPath('.../deptLimitOld')`;含全部调整/导出/打印。
**写操作**:行调整/编辑只打开后取消;全部调整不提交。
**动态取数**:`${sampleMaterialNo}`、建议上下限列。
---
## 基础设置 · 科室管理
### 科室上下限建议 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-MNM-001】【TP_DEPTM_MNM_005】默认条件查询
- 前置条件:已进入科室上下限建议页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `DEPTM-MNM-001` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
##### 【P0】【TC-UI-DEPTM-MNM-002】【TP_DEPTM_MNM_007】全量可见条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(只填当前结果里有值的条件,见 rules 3.2)
2. 快捷区可见非空条件全部填入后查询
3. 抽样首行同时满足全部已填条件;无未捕获异常
- 自动化断言:规划与 CSV `DEPTM-MNM-002` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
查询正常无报错;查询结果与查询条件一致。
---
### 科室上下限建议 · 列表
#### 边界验证点
##### 【P1】【TC-UI-DEPTM-MNM-003】【TP_DEPTM_MNM_019】无匹配空态(mock反例)
- 前置条件:已进入科室上下限建议页
- 操作步骤:
1. 科室名称/编号或任务名称等关键字填入 `__NOT_EXIST_DEPT__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `DEPTM-MNM-003` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期数据为成功态。
---
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-MNM-004】【TP_DEPTM_MNM_017】列表核心列完整
- 前置条件:已进入科室上下限建议页
- 操作步骤:
1. 断言表头含 物料编号、建议上下限、状态、操作
2. 若有数据行,断言操作列可见 调整、编辑
- 自动化断言:规划与 CSV `DEPTM-MNM-004` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
核心列完整;行内操作入口可见。
---
##### 【P1】【TC-UI-DEPTM-MNM-005】【TP_DEPTM_MNM_018】物料编号列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「物料编号」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `DEPTM-MNM-005` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-DEPTM-MNM-006】【TP_DEPTM_MNM_018】物料名称列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「物料名称」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `DEPTM-MNM-006` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-DEPTM-MNM-007】【TP_DEPTM_MNM_018】规格型号列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「规格型号」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `DEPTM-MNM-007` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
##### 【P1】【TC-UI-DEPTM-MNM-008】【TP_DEPTM_MNM_018】器械注册人列升序降序切换
- 前置条件:至少 2 条数据,否则 skip
- 操作步骤:
1. 默认查询后列表有数据
2. 横向滚动使「器械注册人」列表头可见(宽表时)
3. 第一次点击该列排序控件并校验升序指示器
4. 第二次点击并校验降序指示器
- 自动化断言:规划与 CSV `DEPTM-MNM-008` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
排序按钮可点击;升序与降序指示器分别激活;列表仍有数据。
---
#### 集成验证点
##### 【P0】【TC-UI-DEPTM-MNM-009】【TP_DEPTM_MNM_020】行内操作可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行存在数据时,点击行内首个操作(如编辑/详情/配置)
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `DEPTM-MNM-009` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 科室上下限建议 · 分页
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-MNM-010】【TP_DEPTM_MNM_021】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `DEPTM-MNM-010` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 科室上下限建议 · 导出
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-MNM-011】【TP_DEPTM_MNM_012】导出入口可触发
- 前置条件:已进入科室上下限建议页
- 操作步骤:
1. 点击「导 出」
2. 断言无未捕获异常(不校验文件)
- 自动化断言:规划与 CSV `DEPTM-MNM-011` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
导出流程可启动。
---
### 科室上下限建议 · 打印
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-MNM-012】【TP_DEPTM_MNM_014】打印入口可触发
- 前置条件:已进入科室上下限建议页
- 操作步骤:
1. 点击「打 印」
2. 断言无未捕获异常
- 自动化断言:规划与 CSV `DEPTM-MNM-012` 及 `tests/spd/deptm-minmax.spec.ts` 一致
###### 预期结果
打印流程可启动。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **12** 条(P0=4 / P1=8) |
| 来源 | 从 28 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 调整算法正确性、导出/打印文件 |
| 单一职责 | 每条只断言一个核心业务结果 |
| 独立性 | 每条独立 open/openFromMenu,不复用 BrowserContext |
# 基础管理-科室管理-科室产品分配 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-科室管理-科室产品分配-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-科室管理-科室产品分配-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dept/platform/dept/product`
**定位器 YAML**:`locators/spd/deptm-product-alloc.locator.yaml`
**元素扫描**:`data/scan/deptm-product-alloc-elements.json`(100 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-DEPTM-003.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/deptm-product-alloc.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` 经 `auth.setup` 写入 `storageState`(密码仅存 `.env` 的 `TEST_PASS`);具备「基础设置 → 科室管理 → 科室产品分配」权限。反例筛选用 mock。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上;每用例独立 context(见 playwright-storage-state-isolation)。
**菜单导航**:`openPath('.../product')`;左侧科室树 + 右侧物料列表。
**写操作**:新增/编辑/批量修改/Excel 导入仅入口与取消;打印/导出不校验文件。
**动态取数**:树节点 `${sampleDeptNode}`;首行物料 `${sampleMaterialNo}`。
---
## 基础设置 · 科室管理
### 科室产品分配 · 左侧科室树
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-PRA-001】【TP_DEPTM_PRA_005】科室树默认选中且右侧有范围
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 断言左侧科室树可见且有选中或可展开节点
2. 读取选中节点名称 `${sampleDeptNode}`
3. 断言右侧列表/表单与当前节点范围一致或为空态
- 自动化断言:规划与 CSV `DEPTM-PRA-001` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
树有选中;右侧不展示其它节点数据为成功态。
---
##### 【P0】【TC-UI-DEPTM-PRA-002】【TP_DEPTM_PRA_007】切换树节点刷新右侧
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 记录当前节点与右侧首行(若有)
2. 点选另一树节点(仅 1 个则 skip)
3. 断言右侧数据范围切换,不残留上一节点首行
- 自动化断言:规划与 CSV `DEPTM-PRA-002` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
切换节点后右侧刷新。
---
### 科室产品分配 · 快捷筛选查询
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-PRA-003】【TP_DEPTM_PRA_011】默认条件查询
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 点击「查 询」或「查询」
2. 断言列表有数据或明确空态,「共 N 条」与当前结果一致
- 自动化断言:规划与 CSV `DEPTM-PRA-003` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
默认查询无报错;总数与列表一致。
---
### 科室产品分配 · 高级筛选抽屉
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-PRA-004】【TP_DEPTM_PRA_019】全量查询条件组合查询
- 前置条件:默认查询至少 1 条,否则 skip
- 操作步骤:
1. 默认查询 → 从首行提取全量样本(不写死业务数据,见 rules 3.4)
2. 快捷区填入样本中有值的可见字段
3. 高级筛选抽屉填入样本中所有非空字段(文本直接填、下拉选同值;禁用字段记录默认)
4. 「查询/筛选」后抽样首行与汇总(若有);首行同时满足样本中全部已填字段
- 自动化断言:规划与 CSV `DEPTM-PRA-004` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
查询正常无报错;查询条件写值正常;查询结果与查询条件一致。
---
### 科室产品分配 · 列表
#### 边界验证点
##### 【P1】【TC-UI-DEPTM-PRA-005】【TP_DEPTM_PRA_030】无匹配空态(mock反例)
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 科室名称/编号或任务名称等关键字填入 `__NOT_EXIST_DEPT__99999` 后查询
2. 断言表头仍在,0 行或空态,分页总数为 0
- 自动化断言:规划与 CSV `DEPTM-PRA-005` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
无匹配不报错;不展示过期数据为成功态。
---
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-PRA-006】【TP_DEPTM_PRA_028】列表核心列完整
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 断言表头含 规格型号、物料编号、操作
2. 若有数据行,断言操作列可见 详情、编辑
- 自动化断言:规划与 CSV `DEPTM-PRA-006` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
核心列完整;行内操作入口可见。
---
##### 【P2】【TC-UI-DEPTM-PRA-007】【TP_DEPTM_PRA_029】列设置隐藏后再恢复
- 前置条件:列表表头已加载
- 操作步骤:
1. 默认查询后点击表格工具栏列设置(齿轮,非 column-height 密度)
2. 取消勾选一列非核心字段并关闭面板,断言表头隐藏
3. 再次打开列设置勾选恢复并关闭,断言表头恢复
- 自动化断言:规划与 CSV `DEPTM-PRA-007` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
勾选状态与表头一致。
---
#### 集成验证点
##### 【P0】【TC-UI-DEPTM-PRA-008】【TP_DEPTM_PRA_031】行内操作可达(只读冒烟)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 首行存在数据时,点击行内首个操作(如编辑/详情/配置)
2. 断言进入预期弹窗/抽屉/详情,可见取消或关闭
3. 关闭弹层,列表仍可见
- 自动化断言:规划与 CSV `DEPTM-PRA-008` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
行内操作可达;关闭后回到列表。
---
### 科室产品分配 · 分页
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-PRA-009】【TP_DEPTM_PRA_032】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `DEPTM-PRA-009` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
---
### 科室产品分配 · 导出
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-PRA-010】【TP_DEPTM_PRA_021】导出入口可触发
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 点击「导 出」
2. 断言无未捕获异常(不校验文件)
- 自动化断言:规划与 CSV `DEPTM-PRA-010` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
导出流程可启动。
---
### 科室产品分配 · 打印
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-PRA-011】【TP_DEPTM_PRA_023】打印入口可触发
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 点击「打 印」
2. 断言无未捕获异常
- 自动化断言:规划与 CSV `DEPTM-PRA-011` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
打印流程可启动。
---
### 科室产品分配 · 新增弹窗
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-PRA-012】【TP_DEPTM_PRA_040】打开新增弹窗/抽屉
- 前置条件:已进入科室产品分配页
- 操作步骤:
1. 点击「新增」或「新 增」
2. 断言弹窗/抽屉可见,含「取 消」「确 定」或关闭
- 自动化断言:规划与 CSV `DEPTM-PRA-012` 及 `tests/spd/deptm-product-alloc.spec.ts` 一致
###### 预期结果
新增层打开;关键按钮可见。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **12** 条(P0=7 / P1=4 / P2=1) |
| 来源 | 从 45 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 批量修改全字段、导入 Excel 字段、真实分配保存 |
| 单一职责 | 每条只断言一个核心业务结果 |
| 独立性 | 每条独立 open/openFromMenu,不复用 BrowserContext |
# 基础管理-科室管理-科室人员查询 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-科室管理-科室人员查询-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-科室管理-科室人员查询-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dept/platform/dept/person`
**定位器 YAML**:`locators/spd/deptm-staff.locator.yaml`
**元素扫描**:`data/scan/deptm-staff-elements.json`(102 项)
**关联规范**:`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-DEPTM-008.md`
**版本**:2026-11-03
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/deptm-staff.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:正例账号 `test_1` 经 `auth.setup` 写入 `storageState`(密码仅存 `.env` 的 `TEST_PASS`);具备「基础设置 → 科室管理 → 科室人员查询」权限。反例筛选用 mock。
**页面约定**:整页渲染,**无报表 iframe**;定位均在 `page` 上;每用例独立 context(见 playwright-storage-state-isolation)。
**菜单导航**:`openPath('.../person')`;左科室目录 + 右人员列表。
**写操作**:重置密码只打开确认框后取消;科室负责人勾选不持久化验证。
**动态取数**:`${sampleLogin}`、`${samplePersonName}`。
---
## 基础设置 · 科室管理
### 科室人员查询 · 左侧科室目录树
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-STF-001】【TP_DEPTM_STF_005】科室目录树默认选中且右侧有范围
- 前置条件:已进入科室人员查询页
- 操作步骤:
1. 断言左侧科室目录树可见且有选中或可展开节点
2. 读取选中节点名称 `${sampleDeptNode}`
3. 断言右侧列表/表单与当前节点范围一致或为空态
- 自动化断言:规划与 CSV `DEPTM-STF-001` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
树有选中;右侧不展示其它节点数据为成功态。
---
##### 【P0】【TC-UI-DEPTM-STF-002】【TP_DEPTM_STF_007】切换树节点刷新右侧
- 前置条件:已进入科室人员查询页
- 操作步骤:
1. 记录当前节点与右侧首行(若有)
2. 点选另一树节点(仅 1 个则 skip)
3. 断言右侧数据范围切换,不残留上一节点首行
- 自动化断言:规划与 CSV `DEPTM-STF-002` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
切换节点后右侧刷新。
---
### 科室人员查询 · 人员筛选与行操作
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-STF-003】【TP_DEPTM_STF_011】人员名称搜索
- 前置条件:当前科室至少 1 人
- 操作步骤:
1. 读取首行 `${samplePersonName}` 取关键字
2. 在人员名称搜索框输入并搜索
3. 断言列表账号/姓名匹配
- 自动化断言:规划与 CSV `DEPTM-STF-003` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
人员搜索命中。
---
##### 【P0】【TC-UI-DEPTM-STF-004】【TP_DEPTM_STF_013】重置密码确认框(取消)
- 前置条件:列表至少 1 条
- 操作步骤:
1. 点击首行「重置密码」
2. 断言出现确认框
3. 点击取消,列表无异常变化
- 自动化断言:规划与 CSV `DEPTM-STF-004` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
确认框可见;取消不改密。
---
### 科室人员查询 · 列表
#### 功能验证点
##### 【P0】【TC-UI-DEPTM-STF-005】【TP_DEPTM_STF_017】列表核心列完整
- 前置条件:已进入科室人员查询页
- 操作步骤:
1. 断言表头含 账号、人员名称、联系电话、操作
2. 若有数据行,断言操作列可见 重置密码
- 自动化断言:规划与 CSV `DEPTM-STF-005` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
核心列完整;行内操作入口可见。
---
##### 【P2】【TC-UI-DEPTM-STF-006】【TP_DEPTM_STF_018】列设置隐藏后再恢复
- 前置条件:列表表头已加载
- 操作步骤:
1. 默认查询后点击表格工具栏列设置(齿轮,非 column-height 密度)
2. 取消勾选一列非核心字段并关闭面板,断言表头隐藏
3. 再次打开列设置勾选恢复并关闭,断言表头恢复
- 自动化断言:规划与 CSV `DEPTM-STF-006` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
勾选状态与表头一致。
---
### 科室人员查询 · 分页
#### 功能验证点
##### 【P1】【TC-UI-DEPTM-STF-007】【TP_DEPTM_STF_020】分页翻至第 2 页
- 前置条件:总条数大于一页,否则 skip
- 操作步骤:
1. 记录第 1 页首行关键字段
2. 点击页码「2」或「下一页」
3. 断言页码高亮正确,首行数据与第 1 页不同
- 自动化断言:规划与 CSV `DEPTM-STF-007` 及 `tests/spd/deptm-staff.spec.ts` 一致
###### 预期结果
翻页成功;数据更换。
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **7** 条(P0=5 / P1=1 / P2=1) |
| 来源 | 从 27 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 真实改密、负责人权限落库 |
| 单一职责 | 每条只断言一个核心业务结果 |
| 独立性 | 每条独立 open/openFromMenu,不复用 BrowserContext |
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment