Commit 1a4c1b8b authored by liguangyu06's avatar liguangyu06
Browse files

从 temp 选择性同步框架与用例到 main

合入自动化代码、用例 CSV/MD/spec/PO 及登录态修复;不含 knowledge-base、.cursor、data/scan 等 temp 全量备份内容。
parent f6eec849
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-AF1-001","基础设置 · 厂商管理","授权变更初审 · 页面进入","菜单进入授权变更初审页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 按菜单「基础设置 → 厂商管理 → 授权变更初审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/authAudit`
3. 断言可见「查 询」「重 置」及制单日期筛选","进入授权变更初审页;不误入其它变更审批菜单。",""
"VENDOR-AF1-002","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确","查询无报错;有数据时分页 N≥1。",""
"VENDOR-AF1-003","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","按单号筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe);列表至少 1 条且单号非空","1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字","单号列与条件一致。",""
"VENDOR-AF1-004","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","按进院供应商筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe);列表至少 1 条","1. 按样本填写或选择「进院供应商」并查询
2. 断言结果列与条件匹配","筛选条件生效。",""
"VENDOR-AF1-005","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","重置恢复默认","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新","重置成功。",""
"VENDOR-AF1-006","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0","无匹配时不报错;总数为 0。",""
"VENDOR-AF1-007","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、原供应商、预转供应商、操作
2. 断言存在「详情」操作","核心列与详情入口可见。",""
"VENDOR-AF1-008","基础设置 · 厂商管理","授权变更初审 · 详情","打开详情后返回","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe);存在含「详情」的行","1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批","详情只读可返回;列表状态不变。",""
"VENDOR-AF1-009","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","制单日期起止同一天","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确","同日区间行为明确。",""
"VENDOR-AF1-010","基础设置 · 厂商管理","授权变更初审 · 详情","与终审单据衔接不串单","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更初审页(/spd/basic/mfrs/paltform/mfrsName/authAudit,无 iframe)","1. 记录本页某单号后切换到对应终审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单","初审/终审衔接正确。",""
"VENDOR-AF1-011","基础设置 · 厂商管理","授权变更初审 · 筛选与列表","多条件组合查询(制单日期等9项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「制单日期」日期区间选择当天
3. 「单号」填写关键字
4. 「销售商」下拉选择任一可选项
5. 「预转供应商」填写关键字
6. 「状态」下拉选择任一可选项
7. 「变更类型」下拉选择任一可选项
8. 「原供应商」填写关键字
9. 「医院ID」填写关键字
10. 「医院名称」填写关键字
11. 点击「查询」
12. 检查列表返回结果","多条件同时生效:制单日期、单号、销售商、预转供应商、状态、变更类型、原供应商、医院ID、医院名称 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-AF2-001","基础设置 · 厂商管理","授权变更终审 · 页面进入","菜单进入授权变更终审页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 按菜单「基础设置 → 厂商管理 → 授权变更终审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/authAuditFinal`
3. 断言可见「查 询」「重 置」及制单日期筛选","进入授权变更终审页;不误入其它变更审批菜单。",""
"VENDOR-AF2-002","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确","查询无报错;有数据时分页 N≥1。",""
"VENDOR-AF2-003","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","按单号筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe);列表至少 1 条且单号非空","1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字","单号列与条件一致。",""
"VENDOR-AF2-004","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","按进院供应商筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe);列表至少 1 条","1. 按样本填写或选择「进院供应商」并查询
2. 断言结果列与条件匹配","筛选条件生效。",""
"VENDOR-AF2-005","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","重置恢复默认","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新","重置成功。",""
"VENDOR-AF2-006","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0","无匹配时不报错;总数为 0。",""
"VENDOR-AF2-007","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、原供应商、预转供应商、操作
2. 断言存在「详情」操作","核心列与详情入口可见。",""
"VENDOR-AF2-008","基础设置 · 厂商管理","授权变更终审 · 详情","打开详情后返回","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe);存在含「详情」的行","1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批","详情只读可返回;列表状态不变。",""
"VENDOR-AF2-009","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","制单日期起止同一天","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确","同日区间行为明确。",""
"VENDOR-AF2-010","基础设置 · 厂商管理","授权变更终审 · 详情","与初审单据衔接不串单","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入授权变更终审页(/spd/basic/mfrs/paltform/mfrsName/authAuditFinal,无 iframe)","1. 记录本页某单号后切换到对应初审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单","初审/终审衔接正确。",""
"VENDOR-AF2-011","基础设置 · 厂商管理","授权变更终审 · 筛选与列表","多条件组合查询(制单日期等7项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「制单日期」日期区间选择当天
3. 「单号」填写关键字
4. 「销售商」下拉选择任一可选项
5. 「预转供应商」填写关键字
6. 「状态」下拉选择任一可选项
7. 「变更类型」下拉选择任一可选项
8. 「原供应商」填写关键字
9. 点击「查询」
10. 检查列表返回结果","多条件同时生效:制单日期、单号、销售商、预转供应商、状态、变更类型、原供应商 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-CF1-001","基础设置 · 厂商管理","注册证变更初审 · 页面进入","菜单进入注册证变更初审页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 按菜单「基础设置 → 厂商管理 → 注册证变更初审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/regCertAudit`
3. 断言可见「查 询」「重 置」及制单日期筛选","进入注册证变更初审页;不误入其它变更审批菜单。",""
"VENDOR-CF1-002","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确","查询无报错;有数据时分页 N≥1。",""
"VENDOR-CF1-003","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","按单号筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe);列表至少 1 条且单号非空","1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字","单号列与条件一致。",""
"VENDOR-CF1-004","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","按注册证号(新)筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe);列表至少 1 条","1. 按样本填写或选择「注册证号(新)」并查询
2. 断言结果列与条件匹配","筛选条件生效。",""
"VENDOR-CF1-005","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","重置恢复默认","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新","重置成功。",""
"VENDOR-CF1-006","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0","无匹配时不报错;总数为 0。",""
"VENDOR-CF1-007","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、注册证号(新)、操作
2. 断言存在「详情」操作","核心列与详情入口可见。",""
"VENDOR-CF1-008","基础设置 · 厂商管理","注册证变更初审 · 详情","打开详情后返回","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe);存在含「详情」的行","1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批","详情只读可返回;列表状态不变。",""
"VENDOR-CF1-009","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","制单日期起止同一天","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确","同日区间行为明确。",""
"VENDOR-CF1-010","基础设置 · 厂商管理","注册证变更初审 · 详情","与终审单据衔接不串单","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更初审页(/spd/basic/mfrs/paltform/mfrsName/regCertAudit,无 iframe)","1. 记录本页某单号后切换到对应终审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单","初审/终审衔接正确。",""
"VENDOR-CF1-011","基础设置 · 厂商管理","注册证变更初审 · 筛选与列表","多条件组合查询(制单日期等6项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「制单日期」日期区间选择当天
3. 「单号」填写关键字
4. 「变更类型」下拉选择任一可选项
5. 「注册证号(新)」填写关键字
6. 「状态」下拉选择任一可选项
7. 「变更情况具体说明」填写关键字
8. 点击「查询」
9. 检查列表返回结果","多条件同时生效:制单日期、单号、变更类型、注册证号(新)、状态、变更情况具体说明 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-CF2-001","基础设置 · 厂商管理","注册证变更终审 · 页面进入","菜单进入注册证变更终审页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 按菜单「基础设置 → 厂商管理 → 注册证变更终审」进入
2. 断言 URL 含 `/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal`
3. 断言可见「查 询」「重 置」及制单日期筛选","进入注册证变更终审页;不误入其它变更审批菜单。",""
"VENDOR-CF2-002","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 点击「查 询」并等待列表稳定
2. 断言出现数据行或空态明确","查询无报错;有数据时分页 N≥1。",""
"VENDOR-CF2-003","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","按单号筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe);列表至少 1 条且单号非空","1. 从首行读取 `${sampleOrderNo}` 取关键字
2. 单号填入关键字并「查 询」
3. 断言结果行「单号」包含关键字","单号列与条件一致。",""
"VENDOR-CF2-004","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","按注册证号(新)筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe);列表至少 1 条","1. 按样本填写或选择「注册证号(新)」并查询
2. 断言结果列与条件匹配","筛选条件生效。",""
"VENDOR-CF2-005","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","重置恢复默认","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 填写筛选项后点击「重 置」
2. 断言文本条件清空、列表按默认规则刷新","重置成功。",""
"VENDOR-CF2-006","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 单号填入 `__NOT_EXIST_ORDER__99999` 并查询
2. 断言空态且分页总数为 0","无匹配时不报错;总数为 0。",""
"VENDOR-CF2-007","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 断言表头含 进院供应商名称、单号、状态、制单时间、制单人、变更类型、注册证号(新)、操作
2. 断言存在「详情」操作","核心列与详情入口可见。",""
"VENDOR-CF2-008","基础设置 · 厂商管理","注册证变更终审 · 详情","打开详情后返回","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe);存在含「详情」的行","1. 点击行内「详 情」
2. 断言详情层可见且含单号片段
3. 返回/关闭,不提交审批","详情只读可返回;列表状态不变。",""
"VENDOR-CF2-009","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","制单日期起止同一天","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 制单日期起止选同一天并查询
2. 断言仅返回该日单据或空态明确","同日区间行为明确。",""
"VENDOR-CF2-010","基础设置 · 厂商管理","注册证变更终审 · 详情","与初审单据衔接不串单","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证变更终审页(/spd/basic/mfrs/paltform/mfrsName/regCertAuditFinal,无 iframe)","1. 记录本页某单号后切换到对应初审菜单
2. 断言同业务单据状态流转合理、不串到非本业务菜单","初审/终审衔接正确。",""
"VENDOR-CF2-011","基础设置 · 厂商管理","注册证变更终审 · 筛选与列表","多条件组合查询(制单日期等5项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「制单日期」日期区间选择当天
3. 「单号」填写关键字
4. 「变更类型」下拉选择任一可选项
5. 「注册证号(新)」填写关键字
6. 「状态」下拉选择任一可选项
7. 点击「查询」
8. 检查列表返回结果","多条件同时生效:制单日期、单号、变更类型、注册证号(新)、状态 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-CDF-001","基础设置 · 厂商管理","注册证差异对比 · 页面进入","菜单进入注册证差异对比页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 按菜单「基础设置 → 厂商管理 → 注册证差异对比」进入
2. 断言 URL 含 `certCompare`
3. 断言外壳或 iframe 内可见物料名称/全部/一致/不一致等主区","进入差异对比页;iframe 或主区加载成功。",""
"VENDOR-CDF-002","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 在对比页执行查询(若有查询按钮)
2. 断言列表有数据或空态明确","查询无报错。",""
"VENDOR-CDF-003","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","切换不一致 Tab","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 点击「不一致」
2. 断言列表稳定","不一致 Tab 切换成功。",""
"VENDOR-CDF-004","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","切换一致 Tab","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 点击「一致」
2. 断言列表稳定","一致 Tab 切换成功。",""
"VENDOR-CDF-005","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","按物料名称筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe);对比列表至少 1 条","1. 从首行读取 `${sampleMaterialName}` 取关键字
2. 物料名称填入并查询
3. 断言结果行物料名称包含关键字","物料名称匹配。",""
"VENDOR-CDF-006","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 物料名称填 mock 关键字并查询
2. 断言空态或总数为 0","无匹配时不报错。",""
"VENDOR-CDF-007","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 断言表头含物料编号/物料名称/规格型号/生产厂家等关键列","核心对比列可见。",""
"VENDOR-CDF-008","基础设置 · 厂商管理","注册证差异对比 · 导出","导出按钮可见","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 断言「导出」按钮可见(不确认下载)","导出入口可见。",""
"VENDOR-CDF-009","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","仅空格物料名称搜索","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 物料名称仅填空格并查询
2. 断言按空查询处理或提示,不白屏","空格关键字不导致页面异常。",""
"VENDOR-CDF-010","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","一致行两侧字段抽样一致","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 在「一致」Tab 抽样一行
2. 核对望海与 FLI+ 注册证号/效期关键字段一致","标记一致的行两侧关键字段抽样相同。",""
"VENDOR-CDF-011","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","不一致行至少一侧差异","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入注册证差异对比页(/spd/basic/mfrs/scjs/yc/certCompare,无 iframe)","1. 在「不一致」Tab 抽样一行
2. 断言望海与 FLI+ 至少一处字段不同","不一致结论与字段差异相符。",""
"VENDOR-CDF-012","基础设置 · 厂商管理","注册证差异对比 · 筛选与对比","多条件组合查询(物料名称等8项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「物料名称」填写关键字
3. 「规格型号」填写关键字
4. 「状态」下拉选择任一可选项
5. 「望海注册证号」填写关键字
6. 「是否医疗器械」下拉选择任一可选项
7. 「生产厂家」填写关键字
8. 「FLI+注册证号」填写关键字
9. 「27位医保编码」填写关键字
10. 点击「查询」
11. 检查列表返回结果","多条件同时生效:物料名称、规格型号、状态、望海注册证号、是否医疗器械、生产厂家、FLI+注册证号、27位医保编码 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-EVI-001","基础设置 · 厂商管理","评价指标维护 · 页面进入","菜单进入评价指标维护页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 按菜单进入评价指标维护
2. 断言 URL 含 `indicators`
3. 断言可见「指标分类」与查询","进入评价指标维护页。",""
"VENDOR-EVI-002","基础设置 · 厂商管理","评价指标维护 · 树与列表","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 点击查询
2. 断言右表有数据或空态","查询无报错。",""
"VENDOR-EVI-003","基础设置 · 厂商管理","评价指标维护 · 树与列表","点击左侧分类树","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 点击左侧首个分类节点
2. 断言右侧列表刷新","分类切换成功。",""
"VENDOR-EVI-004","基础设置 · 厂商管理","评价指标维护 · 树与列表","按指标编码筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe);右表有数据","1. 取样本指标编码/编号筛选并查询
2. 断言编码列匹配","指标编码匹配。",""
"VENDOR-EVI-005","基础设置 · 厂商管理","评价指标维护 · 树与列表","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 指标编码填 mock 后查询
2. 断言空态","无匹配不报错。",""
"VENDOR-EVI-006","基础设置 · 厂商管理","评价指标维护 · 树与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 断言表头含评价类型、指标编码或指标编号、指标名称、状态、操作","核心列可见。",""
"VENDOR-EVI-007","基础设置 · 厂商管理","评价指标维护 · 详情","打开详情后返回","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe);存在详情操作行","1. 点击行内详情
2. 断言详情层可见
3. 返回不保存","详情只读可返回。",""
"VENDOR-EVI-008","基础设置 · 厂商管理","评价指标维护 · 树与列表","分类下无指标空态","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 选择无指标的分类(若有)
2. 断言右表空态明确","空分类下列表空态正确。",""
"VENDOR-EVI-009","基础设置 · 厂商管理","评价指标维护 · 树与列表","启用指标可供方案使用","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价指标维护页(/spd/basic/mfrs/paltform/mfrsName/indicators,无 iframe)","1. 确认状态为启用的指标
2. 在评价方案维护中核对其可选(只读核对或抽样)","启用指标与方案引用衔接正确。",""
"VENDOR-EVI-010","基础设置 · 厂商管理","评价指标维护 · 树与列表","多条件组合查询(指标编码等2项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「指标编码」填写关键字
3. 「指标名称」填写关键字
4. 点击「查询」
5. 检查列表返回结果","多条件同时生效:指标编码、指标名称 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"VENDOR-EVS-001","基础设置 · 厂商管理","评价方案维护 · 页面进入","菜单进入评价方案维护页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 按菜单进入评价方案维护
2. 断言 URL 含 `evaluationPlan`
3. 断言可见查询与新增","进入评价方案维护页。",""
"VENDOR-EVS-002","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","默认查询列表有数据或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 点击查询
2. 断言列表有数据或「暂无数据」空态","查询无报错。",""
"VENDOR-EVS-003","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","按方案编码筛选","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe);列表有数据","1. 取样本方案编码筛选并查询
2. 断言方案编码列匹配","方案编码匹配。",""
"VENDOR-EVS-004","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","重置恢复默认","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 填写筛选后重置
2. 断言条件清空、列表刷新","重置成功。",""
"VENDOR-EVS-005","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 方案编码填 mock 后查询
2. 断言空态总数 0","无匹配不报错。",""
"VENDOR-EVS-006","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 断言表头含方案编码、方案名称、创建人、创建时间、状态、操作","核心列可见。",""
"VENDOR-EVS-007","基础设置 · 厂商管理","评价方案维护 · 新增","打开新增后取消","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 记录总数
2. 点击新增打开编辑层
3. 取消/返回不提交
4. 断言总数不变","取消不落库。",""
"VENDOR-EVS-008","基础设置 · 厂商管理","评价方案维护 · 新增","必填为空提交拦截","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 打开新增不填必填项尝试提交(若可点)
2. 断言拦截提示,页面不关闭或总数不变","空提交被拦截。",""
"VENDOR-EVS-009","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","方案名称超长输入","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 打开新增,方案名称输入超长字符串(如 200+ 字符)
2. 断言前端截断/校验提示或后端拒绝,不白屏","超长输入被约束且页面可用。",""
"VENDOR-EVS-010","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","方案与评价指标可关联","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 厂商管理」权限;已进入评价方案维护页(/spd/basic/mfrs/paltform/mfrsName/evaluationPlan,无 iframe)","1. 在方案配置中查看指标选择(只读打开)
2. 断言可选指标来源于评价指标维护启用项或规则允许集合","方案与指标主数据衔接正确。",""
"VENDOR-EVS-011","基础设置 · 厂商管理","评价方案维护 · 筛选与维护","多条件组合查询(创建日期等4项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 厂商管理」权限;已进入厂商管理对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「创建日期」日期区间选择当天
3. 「启用日期」日期区间选择当天
4. 「方案编码」填写关键字
5. 「方案名称」填写关键字
6. 点击「查询」
7. 检查列表返回结果","多条件同时生效:创建日期、启用日期、方案编码、方案名称 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
WH-ZON-001,基础设置 · 库房管理,库区设置 · 页面进入,菜单进入库区设置页,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 按菜单「基础设置 → 库房管理 → 库区设置」进入,或 `openPath` 打开 `/spd/basic/storehouse/platform/storehouse/area`
3. 断言 URL 含 `/spd/basic/storehouse/platform/storehouse/area`
4. 断言左侧「库房信息」树、右侧库区列表、「新 增」与分页可见",进入库区设置页;不误入探针绑定;无报错遮罩。,
WH-ZON-002,基础设置 · 库房管理,库区设置 · 页面进入,未登录访问拦截,高,测试环境可访问;使用独立 context,storageState 为空(不加载 test_1 登录态),"1. 新建独立 BrowserContext,不加载 auth/user.json
2. 清除登录态后直接打开 `/spd/basic/storehouse/platform/storehouse/area`
3. 断言跳转登录或不展示库房/库区业务数据",未登录不可见库区数据。,
WH-ZON-003,基础设置 · 库房管理,库区设置 · 左侧库房树,库房树默认有选中项,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言左侧「库房信息」至少 1 个节点且有选中项
3. 读取选中节点 `${sampleWhName}`
4. 断言右侧列表为该库房库区,或空态且「共 0 条」",树有选中;右侧对应当前库房。,
WH-ZON-004,基础设置 · 库房管理,库区设置 · 左侧库房树,按库房名称过滤树,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);库房树至少 1 个节点,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 读取当前选中 `${sampleWhName}` 取关键字(可截取前若干字)
3. 在左侧「库房名称」输入关键字
4. 断言可见节点名称均包含该关键字",树过滤结果与关键字匹配。,
WH-ZON-005,基础设置 · 库房管理,库区设置 · 左侧库房树,清空库房名称恢复全量树,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录过滤前节点数
3. 输入关键字过滤后再清空
4. 断言节点数恢复为过滤前",清空后树恢复全量。,
WH-ZON-006,基础设置 · 库房管理,库区设置 · 左侧库房树,切换库房刷新右侧列表,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录当前库房 `${sampleWhName}` 与右侧首行库区编号(若有)
3. 点选另一库房节点(仅 1 个则 skip)
4. 断言「共 N 条」可变化;若有行则库区编号/名称属于新库房",切换库房后右侧列表刷新,不残留上一库房库区。,
WH-ZON-007,基础设置 · 库房管理,库区设置 · 左侧库房树,无匹配库房空树(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 库房名称填入 `__NOT_EXIST_ZONE__99999`
3. 断言树为空或明确无数据,右侧不展示上一库房库区为成功态",无匹配不报错;不残留上一库房列表当成功。,
WH-ZON-008,基础设置 · 库房管理,库区设置 · 右侧库区列表与分页,列表核心列完整,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言表头含库区编号、库区名称、库区地址、是否专项库区、操作
3. 若有数据行,断言操作列可见「编辑」「人员管理」「货位管理」及「停用」或「启用」",核心列完整;行内操入口可见。,
WH-ZON-009,基础设置 · 库房管理,库区设置 · 右侧库区列表与分页,默认库区以标签展示,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 在当前库房列表中查找「默认库区」标签
3. 断言该标签出现在库区名称旁,不是独立列
4. 断言当前库房至多 1 个默认库区标签(无默认则本条只断言不是独立列)",默认库区为名称旁标签;同一库房至多一个。,
WH-ZON-010,基础设置 · 库房管理,库区设置 · 库区搜索,按库区编号搜索,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区且编号非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleZoneNo}`
3. 在「库区编号/名称」填入该编号并触发搜索
4. 断言结果包含该编号行,且均属于当前选中库房",搜索命中该编号;不串其它库房。,
WH-ZON-011,基础设置 · 库房管理,库区设置 · 库区搜索,按库区名称搜索,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条且名称非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleZoneName}` 取关键字
3. 在「库区编号/名称」填入关键字并搜索
4. 断言结果行名称匹配",名称关键字命中;无未捕获异常。,
WH-ZON-012,基础设置 · 库房管理,库区设置 · 库区搜索,无匹配库区空态(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 「库区编号/名称」填入 `__NOT_EXIST_ZONE__99999` 并搜索
3. 断言列表空且分页为 0",无匹配不报错;总数为 0。,
WH-ZON-013,基础设置 · 库房管理,库区设置 · 新增库区,打开新增库区弹窗,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「新 增」
3. 断言弹出「新增库区」,可见库区编号、库区名称、库区地址、联系人、联系方式及「取 消」「确 定」",新增弹窗可见;关键字段与按钮齐全。,
WH-ZON-014,基础设置 · 库房管理,库区设置 · 新增库区,新增取消不落库,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,编号填 `AUTO${timestamp}`,名称填任意合法值
3. 点击「取 消」
4. 按该编号搜索,断言无该记录",弹窗关闭;列表不出现该编号。,
WH-ZON-015,基础设置 · 库房管理,库区设置 · 新增库区,必填为空拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,库区编号或名称留空后点击「确 定」
3. 断言出现必填提示,弹窗仍打开
4. 点「取 消」",确定被拦截;不落库;弹窗不关闭。,
WH-ZON-016,基础设置 · 库房管理,库区设置 · 编辑库区,打开编辑并回填,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「编辑」
3. 断言弹窗标题含「编辑库区信息」
4. 断言库区编号、名称与该行 `${sampleZoneNo}`、`${sampleZoneName}` 一致(允许规范化空白)
5. 点「取 消」",编辑弹窗可见;回填与列表行一致。,
WH-ZON-017,基础设置 · 库房管理,库区设置 · 编辑库区,编辑取消不保存,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行编辑,记录原名称
3. 将名称改为临时值后点「取 消」
4. 再次打开编辑,断言名称仍为原值",取消后列表与回看均为修改前名称。,
WH-ZON-018,基础设置 · 库房管理,库区设置 · 编辑库区,编辑清空必填拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行编辑,清空库区名称后点「确 定」
3. 断言被拦截并提示,弹窗仍开
4. 点「取 消」,断言列表名称未被写成空",清空必填不能保存;原记录名称保持。,
WH-ZON-019,基础设置 · 库房管理,库区设置 · 人员管理,打开人员管理后关闭,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「人员管理」
3. 断言打开弹层或子页,标题含人员管理或对应当前库区
4. 关闭后断言仍在库区设置,当前库房选中保持",人员管理可打开;关闭后回到当前库房列表。本条不改人员。,
WH-ZON-020,基础设置 · 库房管理,库区设置 · 货位管理,打开货位管理后关闭,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 库区设置」权限;已进入库区设置页(/spd/basic/storehouse/platform/storehouse/area,无 iframe);当前库房至少 1 条库区,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「货位管理」
3. 断言打开弹层或子页,标题含货位且对应当前库区
4. 关闭后断言库房选中与库区列表保持",货位管理可打开;关闭后列表状态保持。本条不改货位。,
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
WH-PRB-001,基础设置 · 库房管理,探针绑定 · 页面进入,菜单进入探针绑定页,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 按菜单「基础设置 → 库房管理 → 探针绑定」进入,或 `openPath` 打开 `/spd/basic/storehouse/storehouse/probe`
3. 断言 URL 含 `/spd/basic/storehouse/storehouse/probe`
4. 断言探针ID、主机编码、是否绑定货位、查询、重置、列表与分页可见",进入探针绑定页;不误入库区设置。,
WH-PRB-002,基础设置 · 库房管理,探针绑定 · 页面进入,未登录访问拦截,高,测试环境可访问;使用独立 context,storageState 为空(不加载 test_1 登录态),"1. 新建独立 BrowserContext,不加载 auth/user.json
2. 清除登录态后直接打开 `/spd/basic/storehouse/storehouse/probe`
3. 断言跳转登录或不展示探针业务列表",未登录不可见探针数据。,
WH-PRB-003,基础设置 · 库房管理,探针绑定 · 筛选与查询,默认查询列表有数据或空态明确,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」并等待列表稳定
3. 断言出现数据行,或「暂无数据」且分页总数为 0",查询无报错;有数据时「共 N 条」N≥1。,
WH-PRB-004,基础设置 · 库房管理,探针绑定 · 筛选与查询,按探针ID查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);默认查询至少 1 条且探针ID非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleProbeId}`
3. 探针ID填入该值,点击「查 询」
4. 断言结果探针ID匹配,精确命中时行数合理",探针ID条件生效。,
WH-PRB-005,基础设置 · 库房管理,探针绑定 · 筛选与查询,按主机编码查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);默认查询至少 1 条且主机编码非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleHostCode}`
3. 主机编码填入该值,点击「查 询」
4. 断言结果行「主机编码」与条件一致",主机编码条件生效;允许多探针共用同一主机。,
WH-PRB-006,基础设置 · 库房管理,探针绑定 · 筛选与查询,按是否绑定货位查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 是否绑定货位选择「已绑定」,点击「查 询」
3. 断言结果「是否绑定货位」均为已绑定,且「绑定的货位」>0
4. 再选「未绑定」查询,断言均为未绑定且数量为 0(无数据则空态)",已绑定数量大于 0;未绑定数量为 0。,
WH-PRB-007,基础设置 · 库房管理,探针绑定 · 筛选与查询,探针ID+主机编码组合查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写 `${sampleProbeId}` 与 `${sampleHostCode}` 后点击「查 询」
3. 断言结果同时满足已填条件",组合条件同时生效。,
WH-PRB-008,基础设置 · 库房管理,探针绑定 · 筛选与查询,重置恢复默认,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写探针ID后点击「重 置」
3. 断言条件恢复默认,列表按默认规则刷新",条件恢复默认;列表刷新。,
WH-PRB-009,基础设置 · 库房管理,探针绑定 · 筛选与查询,无匹配空态(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 探针ID填入 `__NOT_EXIST_PROBE__99999`,点击「查 询」
3. 断言空态且分页总数为 0",无匹配不报错;总数为 0。,
WH-PRB-010,基础设置 · 库房管理,探针绑定 · 列表与分页,列表核心列与数量规则,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言表头含序号、探针ID、主机编码、是否绑定货位、绑定的货位、操作
3. 抽样已绑定行:绑定数量为数字且 >0;抽样未绑定行:数量为 0
4. 断言「绑定的货位」列不是货位号格式",核心列完整;数量列是数字不是货位号。,
WH-PRB-011,基础设置 · 库房管理,探针绑定 · 打开绑定货位弹窗,行内打开货位绑定探针,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「绑定货位」
3. 断言弹出「货位绑定探针」,可见当前库房/库区/货位查询及货位列表",弹窗标题正确;筛选与列表可见。,
WH-PRB-012,基础设置 · 库房管理,探针绑定 · 打开绑定货位弹窗,取消关闭不改主列表,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录主列表首行绑定数量与当前筛选
3. 打开绑定弹窗后点「取 消」
4. 断言主列表绑定数量与筛选条件保持",取消不改绑定关系。,
WH-PRB-013,基础设置 · 库房管理,探针绑定 · 打开绑定货位弹窗,未选货位时确定计数为 0,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开绑定弹窗,不勾选货位
3. 断言底部按钮文案为「确定(0)」或等价
4. 点「取 消」,不点确定保存",未选时计数为 0;本条不保存绑定。,
WH-PRB-014,基础设置 · 库房管理,探针绑定 · 打开绑定货位弹窗,弹窗分页独立于主列表,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录主列表「共 N 条」
3. 打开绑定弹窗,记录弹窗分页「共 M 条」
4. 断言不得用 M 断言主列表 N(货位量级可远大于探针条数)
5. 点「取 消」",弹窗总条数与主列表探针条数相互独立。,
WH-PRB-015,基础设置 · 库房管理,探针绑定 · 弹窗筛选货位,按当前库房筛选货位,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开绑定弹窗,记录默认 `${sampleModalWh}`
3. 点「查 询」
4. 断言可见行「当前库房」与所选库房一致(有数据时)
5. 点「取 消」",弹窗库房条件生效。,
WH-PRB-016,基础设置 · 库房管理,探针绑定 · 弹窗筛选货位,弹窗内重置,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开绑定弹窗,填写货位查询关键字后点「重 置」
3. 断言货位查询条件恢复,列表按弹窗默认规则刷新
4. 点「取 消」",弹窗重置不影响主列表筛选。,
WH-PRB-017,基础设置 · 库房管理,探针绑定 · 勾选货位并保存绑定,勾选后确定计数增加再取消勾选,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 库房管理 → 探针绑定」权限;已进入探针绑定页(/spd/basic/storehouse/storehouse/probe,无 iframe);弹窗货位列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开绑定弹窗,勾选 1 个货位
3. 断言确定按钮计数为 1
4. 取消该勾选,断言计数回到 0
5. 点「取 消」,不保存",计数随勾选变化;取消勾选不落库。,
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"SURG-BASE-001","基础设置 · 手术套包设置","基础包维护 · 左侧分类树","分类名称搜索过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 从左树读取 `${sampleCategoryName}`
2. 在分类名称搜索框填入该关键字(即时过滤或回车,以现网为准)
3. 断言树节点文本均包含该关键字","过滤后树节点名称与关键字匹配;无未捕获异常。",""
"SURG-BASE-002","基础设置 · 手术套包设置","基础包维护 · 左侧分类树","选择分类联动右侧列表","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 点击 `${sampleCategoryName}` 分类节点
2. 等待右侧列表刷新稳定
3. 断言列表加载无报错,分页「共 N 条」与当前分类规模一致","右侧仅展示该分类下基础包;总数与筛选一致。",""
"SURG-BASE-003","基础设置 · 手术套包设置","基础包维护 · 左侧分类树","打开新增分类弹窗","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 点击「新增分类」
2. 断言弹窗可见,含分类名称输入(#form_item_kindName)与「取 消」「确 认」
3. 点击「取 消」关闭","新增分类弹窗字段完整;取消可关闭。",""
"SURG-BASE-004","基础设置 · 手术套包设置","基础包维护 · 左侧分类树","分类搜索清空恢复全量","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 用 `${sampleCategoryName}` 过滤并记录过滤后节点数
2. 清空分类搜索框
3. 断言节点数回到未过滤的默认集合(或不少于过滤后节点数)","清空后分类树恢复默认集合。",""
"SURG-BASE-005","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","默认列出基础包或空态明确","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0","加载无报错;有数据时「共 N 条」N≥1;无数据时空态明确。",""
"SURG-BASE-006","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","产品名称筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleProductName}`
2. 在 `#table_search_form_keyword` 填入该关键字并点击「查 询」
3. 断言结果行产品名称均包含该关键字","过滤结果与关键字匹配;「共 N 条」随之更新。",""
"SURG-BASE-007","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","规格型号筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleSpecModel}`
2. 在 `#table_search_form_goodsSpec` 填入该关键字并点击「查 询」
3. 断言结果行规格型号均包含该关键字","按规格型号过滤生效。",""
"SURG-BASE-008","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","器械注册人筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleMfrsName}`
2. 在 `#table_search_form_goodsMfrsName` 填入该关键字并点击「查 询」
3. 断言结果行器械注册人均包含该关键字","按器械注册人过滤生效。",""
"SURG-BASE-009","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 断言表头包含序号、产品编号、产品名称、规格型号、器械注册人、单位、产地、耗材类型、操作","核心列均可见,操作列含「编 辑」「移 除」。",""
"SURG-BASE-010","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","查询与重置","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 用关键字过滤后点击「重 置」
2. 断言筛选输入框被清空、列表恢复默认集合","重置清空筛选并恢复默认列表。",""
"SURG-BASE-011","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","分页与页大小切换","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据;列表总数大于单页行数上限","1. 切换每页条数(如 50 → 100)
2. 断言单页行数不超过所选值,分页总数不变","页大小切换生效;总数保持稳定。",""
"SURG-BASE-012","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","首页上一页不可用","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 处于第 1 页
2. 断言「上一页」置灰或点击无效果","第 1 页无法回到上一页。",""
"SURG-BASE-013","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","搜索无匹配空态(mock反例)","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 在 `#table_search_form_keyword` 输入 mock 不存在关键字 `__NOT_EXIST_BASE__99999`
2. 点击「查 询」
3. 断言「暂无数据」且分页总数为 0","无匹配时空态明确,不白屏;总数为 0。",""
"SURG-BASE-014","基础设置 · 手术套包设置","基础包维护 · 新增基础包","打开新增基础包弹窗","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 点击「新增基础包」
2. 断言弹窗可见,含基础包名称(#form_item_pkgName)、所属分类(#form_item_kindId)、包编码(#form_item_pkgCode)、备注(#form_item_remark)
3. 断言含「取 消」「确 认」","新增基础包弹窗字段完整(名称/所属分类/包编码/备注)。",""
"SURG-BASE-015","基础设置 · 手术套包设置","基础包维护 · 新增基础包","新增取消不落库","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 记录当前分页总数 `${sampleTotal}`
2. 打开新增,填写名称 `${uniqPkgName}` 后点「取 消」
3. 断言列表总数不变,且无该名称行","取消后不新增基础包。",""
"SURG-BASE-016","基础设置 · 手术套包设置","基础包维护 · 新增基础包","合法必填新增成功","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);允许写基础包;名称 `${uniqPkgName}`(建议 AUTO-BASE-${timestamp})、编码 `${uniqPkgCode}`","1. 打开新增,填写名称、所属分类、包编码
2. 点击「确 认」
3. 断言弹窗关闭,列表出现该名称行且字段一致
4. 后置:按环境约定清理该基础包,避免污染主数据","新增成功且列表可见;用例结束清理,不留生产脏数据。",""
"SURG-BASE-017","基础设置 · 手术套包设置","基础包维护 · 新增基础包","基础包名称为空拦截(mock反例)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 打开新增基础包弹窗,名称留空,补齐所属分类与包编码
2. 点击「确 认」
3. 断言必填提示,弹窗仍在,列表无新行","确定被拦截;不落库。",""
"SURG-BASE-018","基础设置 · 手术套包设置","基础包维护 · 新增基础包","所属分类为空拦截(mock反例)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe)","1. 打开新增基础包弹窗,填写名称与包编码,不选所属分类
2. 点击「确 认」
3. 断言必填提示,弹窗仍在","确定被拦截;不落库。",""
"SURG-BASE-019","基础设置 · 手术套包设置","基础包维护 · 新增基础包","重复点击确定防重","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);允许写基础包;使用唯一名称 `${uniqPkgName}`","1. 打开新增弹窗并填写合法数据
2. 快速连点「确 认」两次
3. 断言只产生一条基础包(或无重复名称/编码行)","连点只落一条;无重复脏数据。",""
"SURG-BASE-020","基础设置 · 手术套包设置","基础包维护 · 行内操作(编辑 / 移除)","行内编辑回填","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 点击首行「编 辑」
2. 断言编辑弹窗可见且回填当前行数据
3. 点击「取 消」关闭","编辑弹窗回填正确;取消不影响数据。",""
"SURG-BASE-021","基础设置 · 手术套包设置","基础包维护 · 行内操作(编辑 / 移除)","移除二次确认防误删","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);默认列表至少 1 条数据","1. 记录当前总数 `${sampleTotal}`
2. 点击首行「移 除」
3. 若出现确认框则点「取 消」
4. 断言总数仍为 `${sampleTotal}`","移除有二次确认;取消不删除。",""
"SURG-BASE-022","基础设置 · 手术套包设置","基础包维护 · 行内操作(编辑 / 移除)","新增基础包可在标准套包被引用","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入基础包维护页(/spd/basic/operationSetting/baseMaintenance,无 iframe);已新增 `${uniqPkgName}` 且未清理;允许跨页只读访问","1. 进入「标准套包维护」,点击「添加基础包」
2. 在弹窗搜索框输入 `${uniqPkgName}`
3. 断言可检索到该基础包并可勾选
4. 后置:清理该基础包","新增基础包在标准套包可选;跨页数据一致。",""
"SURG-BASE-023","基础设置 · 手术套包设置","基础包维护 · 右侧筛选与列表","多条件组合查询(物料名称等5项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 手术套包设置」权限;已进入手术套包设置对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「物料名称」填写关键字
3. 「规格型号」填写关键字
4. 「器械注册人」填写关键字
5. 「耗材类型」下拉选择任一可选项
6. 「是否收费」下拉选择任一可选项
7. 点击「查询」
8. 检查列表返回结果","多条件同时生效:物料名称、规格型号、器械注册人、耗材类型、是否收费 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"SURG-TYPE-001","基础设置 · 手术套包设置","术种维护 · 页面进入","菜单进入术种维护页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 按菜单「基础设置 → 手术套包设置 → 术种维护」进入
2. 断言 URL 含 `/spd/basic/operationSetting/typeMaintenance`
3. 断言左侧分类树(术种分类名称搜索框)、右侧筛选区、状态 Tab、列表与分页可见","进入术种维护页;不误入基础包维护/标准套包维护;左右分栏渲染完整。",""
"SURG-TYPE-002","基础设置 · 手术套包设置","术种维护 · 页面进入","同组页签切换后返回","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 点击页内 Tab「标准套包维护」,等待 URL 切换
2. 返回点击 Tab「术种维护」
3. 断言 URL 回到 typeMaintenance,左树与状态 Tab 重新渲染","三页签互切正常;返回后本页数据恢复。",""
"SURG-TYPE-003","基础设置 · 手术套包设置","术种维护 · 页面进入","未登录访问拦截","高","测试环境可访问;使用 test.use({ storageState: { cookies: [], origins: [] } }) 无登录态;直接访问页面进入 URL(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 不加载登录态(空 storageState)
2. 直接访问 `/spd/basic/operationSetting/typeMaintenance`
3. 断言跳转登录页或不展示术种列表数据","未登录被拦截,不泄露术种数据。",""
"SURG-TYPE-004","基础设置 · 手术套包设置","术种维护 · 左侧术种分类树","术种分类名称搜索过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 从左树读取 `${sampleOperCategoryName}`
2. 在分类名称搜索框填入该关键字(即时过滤或回车,以现网为准)
3. 断言树节点文本均包含该关键字","过滤后树节点名称与关键字匹配;无未捕获异常。",""
"SURG-TYPE-005","基础设置 · 手术套包设置","术种维护 · 左侧术种分类树","选择分类联动右侧列表","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 点击 `${sampleOperCategoryName}` 分类节点
2. 等待右侧列表刷新稳定
3. 断言列表加载无报错,分页「共 N 条」与当前分类规模一致","右侧仅展示该分类下术种;总数与筛选一致。",""
"SURG-TYPE-006","基础设置 · 手术套包设置","术种维护 · 左侧术种分类树","分类树计数与下钻","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);至少 1 个带计数的分类节点","1. 读取某分类节点括号内计数 `${nodeCount}`
2. 点击该节点
3. 断言右侧「共 N 条」与 `${nodeCount}` 一致","分类计数与该分类下术种条数一致。",""
"SURG-TYPE-007","基础设置 · 手术套包设置","术种维护 · 左侧术种分类树","打开分类维护弹窗","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 点击左侧「新增」
2. 断言弹窗可见,含分类名称输入(#basic_kindName)与「取 消」「保 存」
3. 点击「取 消」关闭","分类维护弹窗字段完整;取消可关闭。",""
"SURG-TYPE-008","基础设置 · 手术套包设置","术种维护 · 左侧术种分类树","分类搜索清空恢复全量","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 用 `${sampleOperCategoryName}` 过滤并记录过滤后节点数
2. 清空分类搜索框
3. 断言节点数回到未过滤的默认集合","清空后分类树恢复默认集合。",""
"SURG-TYPE-009","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","术种名称筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleOperName}`
2. 在 `#table_search_form_operationName` 填入该关键字并点击「查 询」
3. 断言结果行术种名称均包含该关键字","过滤结果与关键字匹配;「共 N 条」随之更新。",""
"SURG-TYPE-010","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","病种名称筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleDiseaseName}`
2. 在 `#table_search_form_disease` 填入该关键字并点击「查 询」
3. 断言结果行病种名称均包含该关键字","按病种名称过滤生效。",""
"SURG-TYPE-011","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","状态 Tab 切换与计数一致","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 读取「全部」Tab 括号计数 `${totalCount}`
2. 依次点击「停用」「未建分类」「全部」
3. 每次断言列表条数与「共 N 条」和该 Tab 括号计数一致","Tab 切换后列表仅展示对应状态;括号计数与结果规模一致。",""
"SURG-TYPE-012","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","左树 + 筛选 + Tab 组合过滤","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 选择 `${sampleOperCategoryName}` 分类节点
2. 填入术种名称关键字并点「查 询」
3. 切到「全部」Tab
4. 断言结果为三者交集且无未捕获异常","三条件叠加后结果正确,总数一致。",""
"SURG-TYPE-013","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","重置清空筛选","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 用关键字过滤后点击「重 置」
2. 断言筛选输入框被清空、列表恢复默认集合","重置清空筛选并恢复默认列表。",""
"SURG-TYPE-014","基础设置 · 手术套包设置","术种维护 · 筛选与状态 Tab","无匹配组合空态(mock反例)","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 在 `#table_search_form_operationName` 输入 mock 不存在关键字 `__NOT_EXIST_OPER__99999`
2. 点击「查 询」
3. 断言「暂无数据」且分页总数为 0","无匹配时空态明确,不白屏;总数为 0。",""
"SURG-TYPE-015","基础设置 · 手术套包设置","术种维护 · 列表与编码展示","列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 断言表头包含序号、术种名称、病种名称、诊断编码(ICD-10)、诊断名称(ICD-10)、操作编码(ICD-9-CM-3)、操作名称(ICD-9-CM-3)、操作","核心列均可见,操作列含「编 辑」「停用/启用」。",""
"SURG-TYPE-016","基础设置 · 手术套包设置","术种维护 · 列表与编码展示","ICD-10 诊断编码展示完整","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据;至少 1 条含诊断编码的数据","1. 读取含 ICD-10 编码的行 `${sampleIcd10Code}`
2. 断言编码文本完整(如 A02.000x010)不截断、无乱码","ICD-10 编码完整展示。",""
"SURG-TYPE-017","基础设置 · 手术套包设置","术种维护 · 列表与编码展示","ICD-9-CM-3 操作编码展示完整","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据;至少 1 条含操作编码的数据","1. 读取含操作编码的行 `${sampleIcd9Code}`
2. 断言操作编码(如 00.0200)与操作名称(如 心脏治疗性超声)对应展示无乱码","ICD-9-CM-3 编码与操作名称对应正确。",""
"SURG-TYPE-018","基础设置 · 手术套包设置","术种维护 · 列表与编码展示","分页与页大小切换","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据;列表总数大于单页行数上限","1. 切换每页条数(如 50 → 100)
2. 断言单页行数不超过所选值,分页总数不变","页大小切换生效;总数保持稳定。",""
"SURG-TYPE-019","基础设置 · 手术套包设置","术种维护 · 列表与编码展示","首页上一页不可用","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 处于第 1 页
2. 断言「上一页」置灰或点击无效果","第 1 页无法回到上一页。",""
"SURG-TYPE-020","基础设置 · 手术套包设置","术种维护 · 新增术种","打开新增术种入口","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 点击「新增术种」
2. 断言新增弹窗/页面可见,含术种名称、病种名称、分类与编码相关字段
3. 断言含「取 消」「保 存」","新增术种入口字段完整。",""
"SURG-TYPE-021","基础设置 · 手术套包设置","术种维护 · 新增术种","新增取消不落库","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 记录当前分页总数 `${sampleTotal}`
2. 打开新增,填写名称 `${uniqOperName}` 后点「取 消」
3. 断言列表总数不变,且无该名称行","取消后不新增术种。",""
"SURG-TYPE-022","基础设置 · 手术套包设置","术种维护 · 新增术种","术种名称为空拦截(mock反例)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe)","1. 打开新增术种弹窗,名称留空
2. 点击「保 存」
3. 断言必填提示,弹窗仍在,列表无新行","保存被拦截;不落库。",""
"SURG-TYPE-023","基础设置 · 手术套包设置","术种维护 · 行内操作(编辑 / 停用)","行内编辑回填","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);默认列表至少 1 条数据","1. 点击首行「编 辑」
2. 断言编辑弹窗可见且回填当前术种数据
3. 点击「取 消」关闭","编辑弹窗回填正确;取消不影响数据。",""
"SURG-TYPE-024","基础设置 · 手术套包设置","术种维护 · 行内操作(编辑 / 停用)","停用状态流转","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);存在启用状态术种(优先选 `${uniqOperName}` 自建数据);允许写术种","1. 记录「停用」Tab 当前计数 `${disabledCount}`
2. 点击目标行「停用」,若有确认框则点「确 定」
3. 断言「停用」Tab 计数 +1
4. 后置:对该术种执行「启用」恢复","术种状态变为停用;「停用」计数 +1;结束恢复原状态。",""
"SURG-TYPE-025","基础设置 · 手术套包设置","术种维护 · 行内操作(编辑 / 停用)","停用二次确认防误操作","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入术种维护页(/spd/basic/operationSetting/typeMaintenance,无 iframe);存在启用状态术种","1. 记录「停用」Tab 当前计数
2. 点击首行「停用」
3. 若出现确认框则点「取 消」
4. 断言计数未变化","停用有二次确认;取消不改状态。",""
"用例编号","功能模块","功能测试点","用例标题","优先级","前置条件","测试步骤","预期结果","实际结果"
"SURG-STD-001","基础设置 · 手术套包设置","标准套包维护 · 页面进入","菜单进入标准套包维护页","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 按菜单「基础设置 → 手术套包设置 → 标准套包维护」进入
2. 断言 URL 含 `/spd/basic/operationSetting/standardMaintenance`
3. 断言左侧分类树、右侧筛选区、构成列表与分页可见","进入标准套包维护页;不误入基础包维护/术种维护;左右分栏渲染完整。",""
"SURG-STD-002","基础设置 · 手术套包设置","标准套包维护 · 页面进入","同组页签切换后返回","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 点击页内 Tab「术种维护」,等待 URL 切换
2. 返回点击 Tab「标准套包维护」
3. 断言 URL 回到 standardMaintenance,左树与构成列表重新渲染","三页签互切正常;返回后本页数据恢复。",""
"SURG-STD-003","基础设置 · 手术套包设置","标准套包维护 · 页面进入","未登录访问拦截","高","测试环境可访问;使用 test.use({ storageState: { cookies: [], origins: [] } }) 无登录态;直接访问页面进入 URL(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 不加载登录态(空 storageState)
2. 直接访问 `/spd/basic/operationSetting/standardMaintenance`
3. 断言跳转登录页或不展示套包列表数据","未登录被拦截,不泄露套包数据。",""
"SURG-STD-004","基础设置 · 手术套包设置","标准套包维护 · 左侧术种分类树","术种分类名称搜索过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 从左树读取 `${sampleOperCategoryName}`
2. 在分类搜索框填入该关键字(即时过滤或回车,以现网为准)
3. 断言树节点文本均包含该关键字","过滤后树节点名称与关键字匹配;无未捕获异常。",""
"SURG-STD-005","基础设置 · 手术套包设置","标准套包维护 · 左侧术种分类树","选择分类联动构成列表","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据","1. 点击 `${sampleOperCategoryName}` 分类节点
2. 等待右侧构成列表刷新稳定
3. 断言列表加载无报错,分页「共 N 条」与当前分类规模一致","右侧仅展示该分类下标准套包;总数与筛选一致。",""
"SURG-STD-006","基础设置 · 手术套包设置","标准套包维护 · 左侧术种分类树","分类搜索清空恢复全量","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 用 `${sampleOperCategoryName}` 过滤并记录过滤后节点数
2. 清空分类搜索框
3. 断言节点数回到未过滤的默认集合","清空后分类树恢复默认集合。",""
"SURG-STD-007","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","默认展示标准套包构成","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 等待列表稳定
2. 断言按「包名称」分组出现数据行,或「暂无数据」且分页总数为 0","加载无报错;有数据时「共 N 条」N≥1;无数据时空态明确。",""
"SURG-STD-008","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","产品名称筛选过滤","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleProductName}`
2. 在 `#table_search_form_keyword` 填入该关键字并点击「查 询」
3. 断言结果行产品名称均包含该关键字","过滤结果与关键字匹配;「共 N 条」随之更新。",""
"SURG-STD-009","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","规格型号筛选过滤","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleSpecModel}`
2. 在 `#table_search_form_goodsSpec` 填入该关键字并点击「查 询」
3. 断言结果行规格型号均包含该关键字","按规格型号过滤生效。",""
"SURG-STD-010","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","器械注册人筛选过滤","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据","1. 从首行读取 `${sampleMfrsName}`
2. 在 `#table_search_form_goodsMfrsName` 填入该关键字并点击「查 询」
3. 断言结果行器械注册人均包含该关键字","按器械注册人过滤生效。",""
"SURG-STD-011","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","构成列表核心列完整","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据;存在分组","1. 断言表头/首行包含包名称、包数量/每包含量、产品编号、产品名称、规格型号、器械注册人、单位、产地、耗材类型、操作","核心列均可见,操作列含「编 辑」「移 除」。",""
"SURG-STD-012","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","包名称展开/收起子项","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据;存在可展开的包分组","1. 读取首个包分组名称 `${samplePkgGroupName}`
2. 点击展开该分组,断言出现子项行
3. 再次点击收起,断言子项行隐藏","展开显示子项、收起隐藏子项;分组计数不受影响。",""
"SURG-STD-013","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","查询与重置","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据","1. 用关键字过滤后点击「重 置」
2. 断言筛选输入框被清空、列表恢复默认集合","重置清空筛选并恢复默认列表。",""
"SURG-STD-014","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","分页与页大小切换","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据;列表总数大于单页行数上限","1. 切换每页条数(如 50 → 100)
2. 断言单页行数不超过所选值,分页总数不变","页大小切换生效;总数保持稳定。",""
"SURG-STD-015","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","无匹配组合空态(mock反例)","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 在 `#table_search_form_keyword` 输入 mock 不存在关键字 `__NOT_EXIST_STD__99999`
2. 点击「查 询」
3. 断言「暂无数据」且分页总数为 0","无匹配时空态明确,不白屏;总数为 0。",""
"SURG-STD-016","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","打开添加基础包弹窗","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 点击「添加基础包」
2. 断言弹窗可见,含左侧基础包分类树与右侧基础包明细
3. 断言含「取 消」「确定(N)」","添加基础包弹窗字段完整;确定按钮带选择计数。",""
"SURG-STD-017","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","弹窗内筛选与选择计数联动","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 打开添加基础包弹窗,在搜索框输入基础包关键字
2. 勾选 1 个基础包
3. 断言「确定(N)」计数由 0 变为 1","筛选生效;选择数与确定按钮计数联动。",""
"SURG-STD-018","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","弹窗内构成数量可编辑","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);已勾选至少 1 个基础包","1. 定位明细行「构成数量」步进器,点击「Increase Value」
2. 断言数量 +1 且合计随之更新","构成数量可编辑;加减生效。",""
"SURG-STD-019","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","添加基础包取消不落库","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 记录当前分页总数 `${sampleTotal}`
2. 打开添加基础包,勾选 1 个基础包后点「取 消」
3. 断言构成列表总数不变","取消后不新增构成行。",""
"SURG-STD-020","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","确定按钮零选禁用","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);已打开添加基础包弹窗且未选择","1. 断言「确定(0)」置灰或点击无效果","未选择时确定不可用。",""
"SURG-STD-021","基础设置 · 手术套包设置","标准套包维护 · 添加基础包弹窗","重复添加同一基础包","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);标准套包已含某基础包(或先添加一个);允许写套包","1. 再次打开添加基础包,选择同一基础包并确定
2. 断言按产品规则拒绝/合并/累加,不产生重复脏行","重复添加不产生重复行(策略以现网为准)。",""
"SURG-STD-022","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","打开添加散件弹窗","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 点击「添加散件」
2. 断言弹窗可见并展示「产品列表」视图,含产品名称/规格型号/器械注册人/耗材类型筛选与分页","添加散件弹窗产品列表视图完整。",""
"SURG-STD-023","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","产品列表筛选与选择散件","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);已打开添加散件弹窗","1. 在产品名称筛选框输入 `${sampleProductName}`
2. 勾选首个匹配散件
3. 断言散件进入应拣明细,计数同步变化","筛选生效;选中散件进入应拣明细。",""
"SURG-STD-024","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","散件规格/应拣明细视图","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);已勾选至少 1 个散件","1. 切换到规格明细/应拣明细视图
2. 断言展示耗材品种数、耗材总数,以及应拣数量、产品编号/名称/规格/注册人/单位/耗材类型/是否收费列","应拣明细视图字段完整。",""
"SURG-STD-025","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","明细统计与实际一致","中","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);应拣明细含至少 1 个散件","1. 读取「耗材品种数」`${itemKindCount}` 与「耗材总数」`${itemTotalCount}`
2. 断言品种数 = 明细去重产品数;总数 = 应拣数量合计","统计口径与实际所选一致。",""
"SURG-STD-026","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","添加散件取消不落库","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe)","1. 记录当前分页总数 `${sampleTotal}`
2. 打开添加散件,勾选散件后点「取 消」
3. 断言构成列表总数不变","取消后不新增散件行。",""
"SURG-STD-027","基础设置 · 手术套包设置","标准套包维护 · 添加散件弹窗","万级散件列表首屏可交互","低","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);添加散件产品列表总量达万级(示例「共 16299 条」)","1. 打开添加散件弹窗
2. 断言首屏可交互(筛选/分页可用),不卡死
3. 避免全量断言,仅校验首行与总数格式","万级列表首屏可用;无超时白屏。",""
"SURG-STD-028","基础设置 · 手术套包设置","标准套包维护 · 行内操作(编辑 / 移除)","行内编辑构成项","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据;先展开目标包","1. 点击子项行「编 辑」
2. 断言编辑弹窗/表单可见并回填当前值
3. 点击「取 消」关闭","编辑回填正确;取消不影响数据。",""
"SURG-STD-029","基础设置 · 手术套包设置","标准套包维护 · 行内操作(编辑 / 移除)","移除二次确认防误删整包","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 → 手术套包设置」权限;已进入标准套包维护页(/spd/basic/operationSetting/standardMaintenance,无 iframe);默认列表至少 1 条数据;先展开目标包","1. 记录当前行数
2. 点击子项行「移 除」
3. 若出现确认框则点「取 消」
4. 断言行数未变化","移除有二次确认;取消不删除。",""
"SURG-STD-030","基础设置 · 手术套包设置","标准套包维护 · 筛选与构成列表","多条件组合查询(物料名称等5项)","高","测试环境可访问;已通过 auth.setup 写入 storageState 登录;具备「基础设置 · 手术套包设置」权限;已进入手术套包设置对应功能页;筛选区已展开","1. 进入页面并等待列表加载
2. 「物料名称」填写关键字
3. 「规格型号」填写关键字
4. 「器械注册人」填写关键字
5. 「耗材类型」下拉选择任一可选项
6. 「是否收费」下拉选择任一可选项
7. 点击「查询」
8. 检查列表返回结果","多条件同时生效:物料名称、规格型号、器械注册人、耗材类型、是否收费 均成功录入/选中;点击查询后请求携带全部条件(页面无报错提示),列表按条件刷新并呈现匹配数据或明确空态,条件之间为「且」关系","待执行"
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
FLOW-INS-001,基础设置 · 流程设置,审批流实例 · 页面进入,菜单进入审批流实例页,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 按菜单「基础设置 → 流程设置 → 审批流实例」进入,或 `openPath` 打开 `/spd/basic/flowSet/workflow/flowCase`
3. 断言 URL 含 `/spd/basic/flowSet/workflow/flowCase`
4. 断言单据编号、审批状态、发起时间、业务类型、摘要、查询、重置、列表与分页可见",进入审批流实例;不误入审批流程设置。,
FLOW-INS-002,基础设置 · 流程设置,审批流实例 · 页面进入,未登录访问拦截,高,测试环境可访问;使用独立 context,storageState 为空(不加载 test_1 登录态),"1. 新建独立 BrowserContext,不加载 auth/user.json
2. 清除登录态后直接打开 `/spd/basic/flowSet/workflow/flowCase`
3. 断言跳转登录或不展示审批单据列表",未登录不可见审批实例。,
FLOW-INS-003,基础设置 · 流程设置,审批流实例 · 筛选与查询,默认日期区间查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」并等待列表稳定
3. 断言出现数据行或空态明确,「共 N 条」与结果逻辑一致",默认查询无报错;有数据时 N≥1。,
FLOW-INS-004,基础设置 · 流程设置,审批流实例 · 筛选与查询,单据编号精确查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);默认查询至少 1 条且单据编号非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleOrderNo}`
3. 单据编号填入完整单号,点击「查 询」
4. 断言至多 1 条,且编号、业务类型与该行一致",精确单号命中当前行。,
FLOW-INS-005,基础设置 · 流程设置,审批流实例 · 筛选与查询,按审批状态筛选,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 审批状态下拉选择「审批通过」(无该选项则选列表中已出现的状态)
3. 点击「查 询」
4. 断言结果「审批状态」列与所选一致",状态筛选生效。,
FLOW-INS-006,基础设置 · 流程设置,审批流实例 · 筛选与查询,按业务类型筛选,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 从首行读取 `${sampleBizType}`
3. 业务类型选择该值,点击「查 询」
4. 断言结果「业务类型」均为该类型",业务类型筛选生效。,
FLOW-INS-007,基础设置 · 流程设置,审批流实例 · 筛选与查询,按发起时间区间筛选,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录当前默认起止日期
3. 点击「查 询」
4. 抽样结果行「发起时间」落在起止日内(含边界)",发起时间落在区间内。,
FLOW-INS-008,基础设置 · 流程设置,审批流实例 · 筛选与查询,按摘要关键字筛选,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 找到摘要非 `--` 的行读取 `${sampleSummary}` 关键字;若全为 `--` 则填 mock 关键字
3. 点击「查 询」
4. 有关键字命中时摘要包含该关键字;mock 无命中时空态且 `--` 行不被命中",非空摘要可检索;`--` 不被非空关键字命中。,
FLOW-INS-009,基础设置 · 流程设置,审批流实例 · 筛选与查询,状态+类型组合查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写 `${sampleStatus}` 与 `${sampleBizType}` 后点击「查 询」
3. 断言抽样行同时满足全部已填条件",组合条件同时生效。,
FLOW-INS-010,基础设置 · 流程设置,审批流实例 · 筛选与查询,重置恢复默认,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写单据编号等条件后点击「重 置」
3. 断言日期回到默认区间,其余条件清空,列表刷新",重置后日期与其它条件恢复默认。,
FLOW-INS-011,基础设置 · 流程设置,审批流实例 · 筛选与查询,无匹配空态(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 单据编号填入 `__NOT_EXIST_FLOW__99999`,点击「查 询」
3. 断言空态且分页总数为 0",无匹配不报错;总数为 0。,
FLOW-INS-012,基础设置 · 流程设置,审批流实例 · 列表与分页,列表核心列完整,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言表头含序号、单据编号、业务类型、发起人、发起部门、发起时间、摘要、审批状态、操作
3. 断言行内可见「详情」",核心列完整;详情入口可见。,
FLOW-INS-013,基础设置 · 流程设置,审批流实例 · 列表与分页,单据编号前缀与业务类型对应,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);默认查询有数据,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 抽样 `PLAN`/`DB`/`GC`/`BUY` 前缀行(有则断言)
3. 断言 PLAN→采购计划、DB→二级库调拨、GC→产品信息变更、BUY→请领单(以现网枚举为准,缺前缀 skip 该项)",前缀与类型对应。,
FLOW-INS-014,基础设置 · 流程设置,审批流实例 · 列表与分页,分页翻至第 2 页,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);总条数大于一页,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录第 1 页首行单据编号
3. 翻到第 2 页
4. 断言数据更换;筛选条件保持",翻页成功;筛选不丢失。,
FLOW-INS-015,基础设置 · 流程设置,审批流实例 · 审批详情,打开详情对应当前行,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录首行 `${sampleOrderNo}`
3. 点击「详情」
4. 断言打开该单审批过程,标题或单号含 `${sampleOrderNo}`",详情单号与当前行一致。,
FLOW-INS-016,基础设置 · 流程设置,审批流实例 · 审批详情,关闭详情保留列表状态,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写单据编号查询后打开详情
3. 点返回/关闭
4. 断言筛选条件与列表仍是打开前的查询结果",返回后条件与页码保持。,
FLOW-INS-017,基础设置 · 流程设置,审批流实例 · 审批详情,详情只读,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流实例」权限;已进入审批流实例页(/spd/basic/flowSet/workflow/flowCase,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行详情
3. 断言无保存审批人/改条件的提交按钮,或此类控件不可用
4. 返回列表",详情只读;改配置须到审批流程设置。,
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
FLOW-DEF-001,基础设置 · 流程设置,审批流程设置 · 页面进入,菜单进入审批流程设置页,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 按菜单「基础设置 → 流程设置 → 审批流程设置」进入,或 `openPath` 打开 `/spd/basic/flowSet/workflow/flowSet`
3. 断言 URL 含 `/spd/basic/flowSet/workflow/flowSet`
4. 断言左侧业务类型、右侧默认审批流与自定义审批流、「保 存」「重 置」可见",进入审批流程设置;不误入审批流实例。,
FLOW-DEF-002,基础设置 · 流程设置,审批流程设置 · 页面进入,未登录访问拦截,高,测试环境可访问;使用独立 context,storageState 为空(不加载 test_1 登录态),"1. 新建独立 BrowserContext,不加载 auth/user.json
2. 清除登录态后直接打开 `/spd/basic/flowSet/workflow/flowSet`
3. 断言跳转登录或不展示审批流配置",未登录不可见审批流配置。,
FLOW-DEF-003,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,业务类型列表可见,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言左侧可见采购计划等类型且有当前高亮项
3. 读取 `${sampleBizType}`",类型列表可见;当前项高亮。,
FLOW-DEF-004,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,按流程名称过滤类型,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 在「流程名称」输入 `${sampleBizType}` 关键字
3. 断言可见类型名称均匹配关键字",类型过滤与关键字匹配。,
FLOW-DEF-005,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,清空关键字恢复全量,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录过滤前类型数量
3. 输入关键字后再清空
4. 断言数量恢复",清空后类型列表恢复全量。,
FLOW-DEF-006,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,切换类型刷新右侧配置,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录当前类型默认流节点文案
3. 点选另一业务类型(仅 1 个则 skip)
4. 断言右侧默认流/自定义流已刷新,不残留上一类型节点人员",切换类型后右侧与该类型已保存配置一致。,
FLOW-DEF-007,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,无匹配类型(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 流程名称填入 `__NOT_EXIST_FLOW__99999`
3. 断言左侧无匹配或空,右侧不把上一类型配置展示为当前成功配置",无匹配不报错。,
FLOW-DEF-008,基础设置 · 流程设置,审批流程设置 · 默认审批流,默认审批流节点可见,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 选中「采购计划」(或当前默认类型)
3. 断言「默认审批流」区域可见节点卡片,含节点/账号/人员三行信息(按卡片容器取文本)",默认流节点结构可见;不点保存。,
FLOW-DEF-009,基础设置 · 流程设置,审批流程设置 · 自定义审批流,新增流程增加一行后重置,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录当前自定义流行数
3. 点击「新增流程」
4. 断言行数 +1,新行含流程名称、条件、审批流程、删除
5. 点击「重 置」,断言行数回到操作前,不点「保 存」",可新增行;重置放弃未保存行。,
FLOW-DEF-010,基础设置 · 流程设置,审批流程设置 · 自定义审批流,空行保存被拦截后重置,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「新增流程」得到空行
3. 点击「保 存」
4. 断言出现必填拦截提示,配置未按成功态关闭
5. 点击「重 置」,放弃该空行",空名称/条件/节点不能落库;拦截后重置恢复。,
FLOW-DEF-011,基础设置 · 流程设置,审批流程设置 · 条件配置,打开条件配置后取消,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe);当前类型至少 1 条自定义流,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 若无自定义行则 skip
3. 点击首条自定义流条件列「编辑」
4. 断言打开「条件配置」
5. 点「取 消」,断言行内条件文案与打开前一致",条件配置可打开;取消不改行内条件。,
FLOW-DEF-012,基础设置 · 流程设置,审批流程设置 · 保存与重置,重置放弃未保存改动,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「新增流程」增加一行
3. 点击「重 置」
4. 断言自定义流行回到上次保存结果",重置不提交;未保存行消失。,
FLOW-DEF-013,基础设置 · 流程设置,审批流程设置 · 左侧业务类型,类型与审批流实例业务类型同源,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 流程设置 → 审批流程设置」权限;已进入审批流程设置页(/spd/basic/flowSet/workflow/flowSet,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录本页左侧类型名称集合(可见范围)
3. 打开审批流实例,展开「业务类型」下拉
4. 断言选项与本页类型同源(允许按权限裁剪,本页有的关键类型如采购计划应能对应)",两页业务类型同源。,
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
USER-UNI-001,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,默认查询列表有数据或空态明确,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」并等待列表稳定
3. 断言出现数据行,或空态且分页总数为 0",查询无报错;有数据时「共 N 条」N≥1。,
USER-UNI-002,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,姓名、所属医院、联系方式、科室、角色等条件组合查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」后读取首行 `${sampleUserName}`、`${sampleLoginName}`、`${sampleHospital}`、`${samplePhone}`、`${sampleDept}`、`${sampleRole}`(科室或联系方式为 `--`/空时换一行)
3. 填写姓名、所属医院,展开高级筛选填写「联系方式」、选择科室与角色后点「筛 选」(无则点「查 询」)
4. 断言结果非空;首行登录账号与采样行一致;可见行姓名/所属医院/联系方式/科室/角色与已填条件一致",组合查询无报错;结果与采样条件一致且同时满足全部已填条件。,
USER-UNI-003,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,重置恢复默认医院,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 更改所属医院或姓名后点击「重 置」
3. 断言所属医院恢复进入页时的默认值,列表刷新",医院等条件恢复默认。,
USER-UNI-004,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,展开高级筛选,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「高级筛选」
3. 断言可见所属医院、联系方式、科室、角色及「筛 选」",高级筛选含医院维度字段。,
USER-UNI-005,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,无匹配空态(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 姓名框填入 `__NOT_EXIST_USER__99999`,点击「查 询」
3. 断言空态且分页总数为 0",无匹配不报错;总数为 0。,
USER-UNI-006,基础设置 · 用户管理,医共体用户管理 · 列表与分页,列表列顺序含所属医院,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 断言列顺序为登录账号、姓名、联系方式、所属医院、所属科室、医院员工编号、角色、科室任职数、操作
3. 勿用用户管理页列断言(用户管理无所属医院且姓名在登录账号前)",列顺序与用户管理页不同;含所属医院。,
USER-UNI-007,基础设置 · 用户管理,医共体用户管理 · 列表与分页,分页翻至第 2 页,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);总条数大于一页,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录第 1 页首行登录账号
3. 翻到第 2 页
4. 断言数据更换且所属医院筛选仍保持",翻页成功;医院条件不丢失。,
USER-UNI-008,基础设置 · 用户管理,医共体用户管理 · 列表与分页,与用户管理页同一用户字段一致,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);两页都能查到同一账号,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录本页首行 `${sampleLoginName}`、姓名、所属科室、角色
3. 打开用户管理页,按登录账号查询同一用户
4. 断言姓名、角色、所属科室一致;本页仅多「所属医院」",同一登录账号跨页字段一致。,
USER-UNI-009,基础设置 · 用户管理,医共体用户管理 · 新增与编辑,打开新增弹窗,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「新 增」
3. 断言弹出用户表单,含账号、姓名、联系方式及取消/确定",新增弹窗可见。,
USER-UNI-010,基础设置 · 用户管理,医共体用户管理 · 新增与编辑,新增取消不落库,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,账号填 `${uniqLogin}` 后点「取 消」
3. 当前医院下列表查询该账号,断言不存在",取消后当前医院列表不出现该账号。,
USER-UNI-011,基础设置 · 用户管理,医共体用户管理 · 新增与编辑,必填为空拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,账号或姓名留空后点「确 定」
3. 断言被拦截,弹窗仍打开,不落库",必填为空不可保存。,
USER-UNI-012,基础设置 · 用户管理,医共体用户管理 · 新增与编辑,打开编辑并回填,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「编辑」
3. 断言弹窗回填与该行登录账号、姓名、所属医院一致
4. 点「取 消」",编辑回填正确;本条不保存。,
USER-UNI-013,基础设置 · 用户管理,医共体用户管理 · 筛选与查询,高级筛选按科室过滤,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);默认查询至少 1 条且所属科室非空/--,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」后读取首行 `${sampleDept}`(空或 `--` 时换一行)
3. 展开高级筛选,选择该科室后点「筛 选」
4. 断言结果非空或空态明确;有数据时可见行「所属科室」与所选科室一致",按科室过滤成功;无报错;结果所属科室与条件一致。,
USER-UNI-014,基础设置 · 用户管理,医共体用户管理 · 列表与分页,切换20条每页页面正常且列表同步,中,"测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);默认查询总条数大于 10 且切换前可见行数不等于 min(N,20),否则 skip","1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,记录分页「共 N 条」与当前页可见行数
3. 分页区切换每页条数为「20 条/页」
4. 断言分页显示 20 条/页;总条数 N 不变;当前页行数为 min(N,20) 且与切换前不同;所属医院筛选、表头可见无报错",切换 20 条/页成功;页面正常;列表可见行数随每页条数同步变化且总数不变。,
USER-UNI-015,基础设置 · 用户管理,医共体用户管理 · 列表与分页,打开列设置面板,低,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」等待列表稳定
3. 点击表格工具栏列设置(齿轮)图标
4. 断言弹出面板含「列展示」「字段设置」「重置」,关闭面板",列设置面板可打开;关键项可见;关闭后列表正常。,
USER-UNI-016,基础设置 · 用户管理,医共体用户管理 · 列表与分页,列设置取消勾选后列表列恢复,低,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);默认查询至少 1 条;存在可 toggle 的非核心列,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」后打开列设置,取消勾选一列非核心字段并关闭
3. 断言该列表头隐藏;再次打开列设置勾选恢复并关闭
4. 断言该列表头重新可见",取消勾选后表头隐藏;再勾选后表头恢复;无报错遮罩。,
USER-UNI-017,基础设置 · 用户管理,医共体用户管理 · 授权,打开授权后取消不生效,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「授权」
3. 断言打开用户角色授权层,可见可勾选菜单/功能
4. 如可勾选则改一处勾选后点取消/关闭
5. 再次打开同一用户授权,断言勾选与操作前一致",授权层可打开;取消后勾选不落库。,
USER-UNI-018,基础设置 · 用户管理,医共体用户管理 · 授权,授权弹框账号与所选行一致,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);列表至少 1 条且登录账号非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,任选列表一条登录账号非空的行,记录 `${sampleLoginName}`、`${sampleUserName}`
3. 点击该行「授权」
4. 断言弹出用户角色授权弹框,弹框展示的账号信息与所选行登录账号、姓名一致
5. 关闭弹框",用户角色授权弹框打开;弹框账号与所选列表行一致。,
USER-UNI-019,基础设置 · 用户管理,医共体用户管理 · 授权,授权弹框添加移除角色行,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 医共体用户管理」权限;已进入医共体用户管理页(/spd/basic/user/platform/personCom,无 iframe);列表至少 1 条;授权弹框含「添加/移除」(非仅权限树模式),否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,任选列表一条数据行,点击该行「授权」
3. 断言弹出用户角色授权弹框
4. 记录弹框内可「移除」的角色行数,点击「添加」
5. 断言可移除行数 +1;点击新增行的「移除」
6. 断言可移除行数恢复为添加前;关闭弹框且不保存",添加后列表下方新增一行;移除后新增行被删除;未保存不落库。,
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
USER-USR-001,基础设置 · 用户管理,用户管理 · 筛选与查询,姓名+科室+角色+状态组合查询,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」后读取首行 `${sampleUserName}`、`${sampleLoginName}`、`${sampleDept}`、`${sampleRole}`、`${sampleStatus}`(角色取截断前列名;状态优先读列表「状态」列,否则按行内启用/禁用文案推断)
3. 填写姓名、科室、角色,展开高级筛选选择 `${sampleStatus}` 后点「筛 选」(无「筛 选」则点「查 询」)
4. 断言结果非空;首行登录账号与采样行一致;可见行姓名/科室/角色/状态与已填条件一致",组合查询无报错;查询结果与首行采样条件一致且同时满足全部已填条件。,
USER-USR-002,基础设置 · 用户管理,用户管理 · 筛选与查询,重置恢复默认,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 填写姓名等筛选条件后点击「重 置」
3. 断言筛选字段恢复默认,列表按默认规则刷新",条件恢复默认;列表刷新。,
USER-USR-003,基础设置 · 用户管理,用户管理 · 筛选与查询,展开高级筛选,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「高级筛选」
3. 断言展开后面板可见姓名/科室/角色/状态及「重 置」「筛 选」",高级筛选面板展开;关键字段与筛选按钮可见。,
USER-USR-004,基础设置 · 用户管理,用户管理 · 筛选与查询,高级筛选按状态过滤,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 展开高级筛选,状态下拉选择「启用」或「禁用」
3. 点击「筛 选」
4. 断言列表仅保留对应状态用户(无匹配则空态且总数为 0)",按状态过滤成功;无报错。,
USER-USR-005,基础设置 · 用户管理,用户管理 · 筛选与查询,无匹配结果空态(mock反例),中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 姓名框填入 `__NOT_EXIST_USER__99999`
3. 点击「查 询」
4. 断言空态或「暂无数据」,分页总数为 0",无匹配时不报错;空态明确;总数为 0。,
USER-USR-006,基础设置 · 用户管理,用户管理 · 列表与分页,分页翻至第 2 页,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);默认查询总条数大于一页,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 记录第 1 页首行登录账号
3. 点击页码「2」或「下一页」
4. 断言页码高亮为 2,首行账号与第 1 页不同",翻页成功;数据更换。,
USER-USR-007,基础设置 · 用户管理,用户管理 · 新增用户,打开新增用户弹窗,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「新 增」
3. 断言弹出用户表单,可见账号、姓名、联系方式、医院员工编号、启用/禁用、「取 消」「确 定」",新增弹窗可见;关键字段与按钮齐全。,
USER-USR-008,基础设置 · 用户管理,用户管理 · 新增用户,新增取消不落库,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,账号填 `${uniqLogin}`,姓名填任意合法值
3. 点击「取 消」
4. 按账号查询,断言无该记录",弹窗关闭;列表不出现 `${uniqLogin}`。,
USER-USR-009,基础设置 · 用户管理,用户管理 · 新增用户,必填为空拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,账号或姓名留空后点击「确 定」
3. 断言出现必填提示,弹窗仍打开",确定被拦截;不落库;弹窗不关闭。,
USER-USR-010,基础设置 · 用户管理,用户管理 · 新增用户,登录账号重复拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);默认查询至少 1 条且登录账号非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开新增,账号填入已存在的 `${sampleLoginName}`,补齐其它必填后点「确 定」
3. 断言保存失败并提示,弹窗仍打开
4. 查询该账号,断言原用户未被覆盖",重复账号被拒绝;不覆盖原用户。,
USER-USR-011,基础设置 · 用户管理,用户管理 · 编辑用户,打开编辑用户弹窗并回填,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「编辑」
3. 断言弹窗标题含「编辑用户」
4. 断言账号、姓名与该行 `${sampleLoginName}`、`${sampleUserName}` 一致(允许规范化空白)",编辑弹窗可见;回填与列表行一致。,
USER-USR-012,基础设置 · 用户管理,用户管理 · 编辑用户,编辑取消不保存,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行编辑,记录原姓名
3. 将姓名改为临时值后点「取 消」
4. 再次打开编辑,断言姓名仍为原值",取消后列表与回看均为修改前姓名。,
USER-USR-013,基础设置 · 用户管理,用户管理 · 编辑用户,编辑时账号只读,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行编辑
3. 断言登录账号不可改(disabled/readonly 或无法输入)",编辑态登录账号只读。,
USER-USR-014,基础设置 · 用户管理,用户管理 · 编辑用户,编辑弹窗可见签名图片,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 打开首行编辑
3. 断言可见「签名图片」区域(有图则展示,无图则上传入口可见)
4. 点「取 消」,不保存",签名图片控件可见;本条不上传、不保存。,
USER-USR-015,基础设置 · 用户管理,用户管理 · 授权,打开授权后取消不生效,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击首行「授权」
3. 断言打开授权层(弹窗或权限树),可见可勾选菜单/功能
4. 如可勾选则改一处勾选后点取消/关闭
5. 再次打开同一用户授权,断言勾选与操作前一致",授权层可打开;取消后勾选不落库。,
USER-USR-016,基础设置 · 用户管理,用户管理 · 列表与分页,切换20条每页页面正常且列表同步,中,"测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);默认查询总条数大于 10 且切换前可见行数不等于 min(N,20),否则 skip","1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,记录分页「共 N 条」与当前页可见行数
3. 分页区切换每页条数为「20 条/页」
4. 断言分页显示 20 条/页;总条数 N 不变;当前页行数为 min(N,20) 且与切换前不同;筛选区、表头可见无报错",切换 20 条/页成功;页面正常;列表可见行数随每页条数同步变化且总数不变。,
USER-USR-017,基础设置 · 用户管理,用户管理 · 列表与分页,打开列设置面板,低,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);默认查询至少 1 条,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」等待列表稳定
3. 点击表格工具栏列设置(齿轮)图标
4. 断言弹出面板含「列展示」「字段设置」「重置」,关闭面板",列设置面板可打开;关键项可见;关闭后列表正常。,
USER-USR-018,基础设置 · 用户管理,用户管理 · 列表与分页,列设置取消勾选后列表列恢复,低,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);默认查询至少 1 条;存在可 toggle 的非核心列,否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」后打开列设置,取消勾选一列非核心字段并关闭
3. 断言该列表头隐藏;再次打开列设置勾选恢复并关闭
4. 断言该列表头重新可见",取消勾选后表头隐藏;再勾选后表头恢复;无报错遮罩。,
USER-USR-019,基础设置 · 用户管理,用户管理 · 授权,授权弹框账号与所选行一致,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条且登录账号非空,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,任选列表一条登录账号非空的行,记录 `${sampleLoginName}`、`${sampleUserName}`
3. 点击该行「授权」
4. 断言弹出用户角色授权弹框,弹框展示的账号信息与所选行登录账号、姓名一致
5. 关闭弹框",用户角色授权弹框打开;弹框账号与所选列表行一致。,
USER-USR-020,基础设置 · 用户管理,用户管理 · 授权,授权弹框添加移除角色行,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 用户管理」权限;已进入用户管理页(/spd/basic/user/platform/person,无 iframe);列表至少 1 条;授权弹框含「添加/移除」(非仅权限树模式),否则 skip,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击「查 询」,任选列表一条数据行,点击该行「授权」
3. 断言弹出用户角色授权弹框
4. 记录弹框内可「移除」的角色行数,点击「添加」
5. 断言可移除行数 +1;点击新增行的「移除」
6. 断言可移除行数恢复为添加前;关闭弹框且不保存",添加后列表下方新增一行;移除后新增行被删除;未保存不落库。,
用例编号,功能模块,功能测试点,用例标题,优先级,前置条件,测试步骤,预期结果,实际结果
USER-ROL-001,基础设置 · 用户管理,角色管理 · 右侧菜单权限树,权限树按应用与模块展开,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 选中任一角色
3. 断言右侧树根为「SPD内网系统PC端」,可见基础设置/运维管理/厂商管理/产品管理等模块
4. 展开「基础设置」,断言可见子菜单(如医院资料)",权限树层级可见;节点可展开。,
USER-ROL-002,基础设置 · 用户管理,角色管理 · 右侧菜单权限树,权限树模块节点收起正常,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 选中任一角色
3. 展开「基础设置」,断言可见子菜单(如医院资料)
4. 点击「基础设置」节点展开图标收起该模块
5. 断言子菜单(如医院资料)不可见,且「基础设置」节点处于收起态",权限树节点可收起;子级随父节点隐藏。,
USER-ROL-003,基础设置 · 用户管理,角色管理 · 左侧角色列表,切换角色右侧权限树同步更新,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);左栏至少 2 个角色,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点选左栏第一个角色,记录右侧权限树勾选快照
3. 点选左栏第二个不同角色,断言该行选中且右侧权限树仍可见
4. 再次点选第一个角色,断言右侧权限树勾选快照与步骤 2 一致",切换后右侧与当前角色一致;切回后恢复该角色已保存勾选,无错乱残留。,
USER-ROL-004,基础设置 · 用户管理,角色管理 · 角色增删改,编辑角色弹框回填名称一致,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);左栏至少 1 个角色,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点选左栏任一角色,记录其角色名称
3. 点击左栏右下角(或行内)编辑图标
4. 断言弹出编辑角色弹框,标题或内容含「编辑」
5. 断言弹框内「角色名称」输入框回填值与所选角色名称一致
6. 点「取 消」或「关 闭」关闭弹框,不保存",编辑弹框正常打开;角色名称与当前选中角色一致;本条不保存。,
USER-ROL-005,基础设置 · 用户管理,角色管理 · 角色增删改,编辑角色保存成功,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);左栏至少 1 个可编辑角色;环境允许写操作(非 SKIP_BASIC_WRITE=1),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点选左栏任一角色
3. 点击左栏右下角(或行内)编辑图标,断言弹出编辑角色弹框
4. 不修改角色名称,点击弹框内「保 存」
5. 断言页面无报错提示,且出现「编辑成功」类成功提示
6. 断言编辑弹框关闭",保存成功;提示编辑成功;角色数据无异常报错。,
USER-ROL-006,基础设置 · 用户管理,角色管理 · 角色增删改,点击角色按钮打开新增弹框,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击左栏工具区「角 色」按钮
3. 断言弹出新增角色弹框,标题或内容含「新增」或「角色」
4. 断言页面无报错提示(无错误 toast/遮罩)
5. 点「取 消」或「关 闭」关闭弹框,不保存",新增角色弹框正常打开;页面无报错;本条不提交保存。,
USER-ROL-007,基础设置 · 用户管理,角色管理 · 角色增删改,新增角色名称为空保存拦截,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击左栏工具区「角 色」按钮,断言弹出新增角色弹框
3. 不填写角色名称,直接点击弹框内「保 存」
4. 断言「角色名称」输入框呈校验失败态(变红)
5. 断言同字段下方提示:请输入角色名称!
6. 点「取 消」关闭弹框,不保存",空名称保存被拦截;角色名称框变红并提示请输入角色名称!;弹框不提交。,
USER-ROL-008,基础设置 · 用户管理,角色管理 · 角色增删改,新增角色弹框取消关闭,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击左栏工具区「角 色」按钮,断言弹出新增角色弹框
3. 不填写任何内容,直接点击弹框内「取 消」
4. 断言新增角色弹框关闭
5. 断言页面无报错提示,左栏角色数量不增加",取消后弹框关闭;页面无报错;未新增角色。,
USER-ROL-009,基础设置 · 用户管理,角色管理 · 角色增删改,新增弹框查询配置化复选框可勾选,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);新增弹框含「查询配置化」复选框,"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击左栏工具区「角 色」按钮,断言弹出新增角色弹框
3. 定位「查询配置化」复选框,点击勾选,断言为选中态
4. 再次点击取消勾选,断言为未选中态
5. 断言页面无报错提示
6. 点「取 消」关闭弹框,不保存",查询配置化可正常勾选与取消勾选;页面无报错;本条不提交保存。,
USER-ROL-010,基础设置 · 用户管理,角色管理 · 角色增删改,新增角色弹框X关闭,高,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点击左栏工具区「角 色」按钮,断言弹出新增角色弹框
3. 点击弹框右上角「X」关闭图标
4. 断言新增角色弹框关闭
5. 断言页面无报错提示,左栏角色数量不增加",X 关闭后弹框正常关闭;页面无报错;未新增角色。,
USER-ROL-011,基础设置 · 用户管理,角色管理 · 左侧角色列表,左栏角色列表可上下滑动,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);左栏列表高度溢出可滚动(不足则 skip),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 定位左栏角色列表滚动区域
3. 向下滚动列表,断言 scrollTop 增加且列表可继续交互
4. 向上滚回(滚轮或滑至顶部),断言 scrollTop 减小
5. 断言页面无报错遮罩",左栏可正常上下滑动;滚动后页面无异常。,
USER-ROL-012,基础设置 · 用户管理,角色管理 · 右侧菜单权限树,右侧权限树子菜单可上下滑动,中,测试环境可访问;正例账号 test_1 已通过 auth.setup 写入 storageState 登录(密码仅存 .env TEST_PASS,勿写入本表);具备「基础设置 → 用户管理 → 角色管理」权限;已进入角色管理页(/spd/basic/user/platform/role,无 iframe);已选中任一角色且右侧权限树高度溢出可滚动(不足则 skip),"1. 确认 chromium 已加载 storageState(auth.setup,正例账号 test_1),无需在用例内重复登录
2. 点选左栏任一角色,断言右侧菜单权限树可见
3. 定位右侧权限树滚动区域(含子菜单列表)
4. 向下滚动,断言 scrollTop 增加
5. 向上滚回,断言 scrollTop 减小
6. 断言页面无报错遮罩",右侧子菜单列表可正常上下滑动;滚动后页面无异常。,
# 基础管理-准入管理-产品准入单列表 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-产品准入单列表-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-产品准入单列表-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/productOrder/list`
**定位器 YAML**:`locators/spd/admit-product-list.locator.yaml`
**元素扫描**:`data/scan/admit-product-list-elements.json`(77 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-product-list.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 准入管理 → 产品准入单列表」权限。
**页面约定**:整页渲染,**无报表 iframe**。与物料准入单列表 URL 不同,列表多「备注」「附件」列。
**菜单导航**:展开「基础设置 → 准入管理」后,点击 `.ant-menu-item` 文案精确为「产品准入单列表」。
**写操作**:不确认「通过」,避免推进真实审批。
**动态取数约定**:
1. 默认查询后从首行读取 `${sampleOrderNo}`、`${sampleProductName}`、`${sampleProductCount}`、`${sampleStatus}`、`${sampleAttachmentCount}`。
2. **禁止写死**准入单号与产品名称。
3. 状态 Tab:全部、审批中、已通过、已驳回。
---
## 基础设置 · 准入管理
### 产品准入单列表 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PLS-001】【TP_ADMIT_PLS_001】菜单进入产品准入单列表
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 产品准入单列表」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/productOrder/list`,且路径不是 `zrlist`
3. 断言制单日期、查询、状态 Tab、列表表头可见
- 自动化断言:规划与 CSV `ADMIT-PLS-001` 及 `tests/spd/admit-product-list.spec.ts` 一致
###### 预期结果
进入产品准入单列表;不误入物料准入单列表。
---
### 产品准入单列表 · 筛选与状态
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PLS-002】【TP_ADMIT_PLS_009】默认查询列表有数据或空态明确
- 前置条件:已进入产品准入单列表
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-PLS-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-PLS-003】【TP_ADMIT_PLS_010】按产品名称筛选
- 前置条件:默认查询至少 1 条且产品名称非空
- 操作步骤:
1. 从首行读取 `${sampleProductName}`
2. 若筛选区无产品名称,则用注册证号或器械注册人中首行非空字段
3. 制单日期保持默认,点击「查 询」
4. 断言结果包含该关键字
- 自动化断言:规划与 CSV `ADMIT-PLS-003` 一致
###### 预期结果
结果与已填关键字匹配。
---
##### 【P1】【TC-UI-ADMIT-PLS-004】【TP_ADMIT_PLS_011】重置恢复默认
- 前置条件:已填入筛选关键字
- 操作步骤:
1. 点击「重 置」
2. 断言筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-PLS-004` 一致
###### 预期结果
筛选恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-PLS-005】【TP_ADMIT_PLS_019】无匹配结果空态(mock反例)
- 前置条件:已进入产品准入单列表
- 操作步骤:
1. 注册证号填入 `__NOT_EXIST_CERT__99999`
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-PLS-005` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PLS-006】【TP_ADMIT_PLS_013】列表核心列与附件计数
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 断言表头含准入单号、进院供应商、二级供应商、产品名称、注册证号、耗材类型、产品条数、状态、备注、附件、操作
2. 断言首行附件列展示个数(可为 0 个)
- 自动化断言:规划与 CSV `ADMIT-PLS-006` 一致
###### 预期结果
核心列可见;附件列有个数;操作为「详情」。本页列表不要求「准入类型」列。
---
##### 【P0】【TC-UI-ADMIT-PLS-007】【TP_ADMIT_PLS_012】切换已通过 Tab
- 前置条件:已进入产品准入单列表
- 操作步骤:
1. 点击「已通过」
2. 断言有数据时状态为已通过
3. 断言 Tab 括号数量等于分页「共 N 条」
- 自动化断言:规划与 CSV `ADMIT-PLS-007` 一致
###### 预期结果
已通过 Tab 的状态与计数一致。
---
##### 【P1】【TC-UI-ADMIT-PLS-008】【TP_ADMIT_PLS_021】与物料准入单列表不串 URL
- 前置条件:当前在产品准入单列表
- 操作步骤:
1. 记录当前 URL
2. 断言 URL 含 `productOrder/list` 且不含 `zrlist`
3. 不点击物料准入单列表菜单
- 自动化断言:规划与 CSV `ADMIT-PLS-008` 一致
###### 预期结果
停留在产品准入单列表路径,不串到物料单路径。
---
### 产品准入单列表 · 单据详情
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PLS-009】【TP_ADMIT_PLS_022】打开详情后返回
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 记录首行 `${sampleOrderNo}`
2. 点击「详情」
3. 断言可见「审批进程」「单据日志」「返 回」
4. 返回后 URL 仍含 `productOrder/list`
- 自动化断言:规划与 CSV `ADMIT-PLS-009` 一致
###### 预期结果
详情可打开;返回后仍是产品准入单列表。
---
##### 【P0】【TC-UI-ADMIT-PLS-010】【TP_ADMIT_PLS_023】详情产品条数与列表一致
- 前置条件:已打开首行详情
- 操作步骤:
1. 读取详情明细分页总数或当前行数
2. 断言等于列表「产品条数」
- 自动化断言:规划与 CSV `ADMIT-PLS-010` 一致
###### 预期结果
明细条数与产品条数一致。
---
##### 【P1】【TC-UI-ADMIT-PLS-011】【TP_ADMIT_PLS_025】单据日志可打开
- 前置条件:已打开单据详情
- 操作步骤:
1. 点击「单据日志」
2. 断言日志层可见
3. 关闭后仍在该单据
- 自动化断言:规划与 CSV `ADMIT-PLS-011` 一致
###### 预期结果
单据日志可查看;详情不被销毁。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-PLS-012】【TP_ADMIT_PLS_028】详情搜索无匹配(mock反例)
- 前置条件:已打开单据详情
- 操作步骤:
1. 搜索框填入 `__NOT_EXIST_GOODS__99999`
2. 断言明细空态,返回按钮仍在
- 自动化断言:规划与 CSV `ADMIT-PLS-012` 一致
###### 预期结果
无匹配只影响明细;单据头仍在。
---
##### 【P0】【TC-UI-ADMIT-PLS-013】【TP_ADMIT_PLS_033】已通过单据不确认通过
- 前置条件:已通过 Tab 至少 1 条并打开详情
- 操作步骤:
1. 「通过」禁用或不可见时,断言状态保持已通过
2. 若可点且出现确认框,点「取 消」
3. 返回列表,断言状态仍为已通过
- 自动化断言:规划与 CSV `ADMIT-PLS-013` 一致
###### 预期结果
不把已通过单据再次审批成功。无已通过数据则 skip。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **13** 条(P0=7 / P1=6) |
| 来源 | 从 34 条测试点选取查询、附件列、详情与审批门禁 |
| 未纳入自动化 | 未登录/权限、确认「通过」、与产品准入申请的跨页追单、附件文件内容打开 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-准入管理-产品准入申请 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-产品准入申请-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-产品准入申请-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/productApply/list`
**定位器 YAML**:`locators/spd/admit-product-apply.locator.yaml`
**元素扫描**:`data/scan/admit-product-apply-elements.json`(467 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-product-apply.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 准入管理 → 产品准入申请」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**菜单导航**:展开「基础设置 → 准入管理」后,点击 `.ant-menu-item` 文案精确为「产品准入申请」。
**写操作**:不真实保存新产品、不导入 Excel、不确认生成申请单或作废。新增页只校验打开、取消和必填拦截。
**动态取数约定**:
1. 默认查询后从首行读取 `${sampleProductName}`、`${sampleSpec}`、`${sampleConsumableType}`、`${sampleOrderNo}`。
2. 筛选使用样本占位,**禁止写死**产品名称与单号。
3. 状态 Tab:全部、待申请、审批中、已通过、已驳回、已作废、生效失败、已生效。分页含「跳至」。总条数不足两页时翻页用例 skip。
---
## 基础设置 · 准入管理
### 产品准入申请 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PAP-001】【TP_ADMIT_PAP_001】菜单进入产品准入申请页
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 产品准入申请」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/productApply/list`,且不是 `ZRlist`
3. 断言可见「查 询」、「Excel导入」「生成申请单」「一键生成」「新增产品」「作 废」及列表表头
- 自动化断言:规划与 CSV `ADMIT-PAP-001` 及 `tests/spd/admit-product-apply.spec.ts` 一致
###### 预期结果
进入产品准入申请页;不误入物料准入管理(ZRlist)或产品准入单列表。
---
### 产品准入申请 · 筛选查询
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PAP-002】【TP_ADMIT_PAP_009】默认查询列表有数据或空态明确
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-PAP-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-PAP-003】【TP_ADMIT_PAP_012】产品名称筛选
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 从首行读取 `${sampleProductName}`
2. 填入产品名称,新增日期保持默认,点击「查 询」
3. 断言结果行「产品名称」均包含该关键字
- 自动化断言:规划与 CSV `ADMIT-PAP-003` 一致
###### 预期结果
产品名称与已填关键字匹配。
---
##### 【P0】【TC-UI-ADMIT-PAP-004】【TP_ADMIT_PAP_013】名称与耗材类型组合查询
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 读取首行 `${sampleProductName}`、`${sampleConsumableType}`
2. 同时填入后点击「查 询」(日期保持默认)
3. 断言结果同时满足两个条件
- 自动化断言:规划与 CSV `ADMIT-PAP-004` 一致
###### 预期结果
组合查询结果同时满足产品名称与耗材类型。类型为空则只断言名称。
---
##### 【P1】【TC-UI-ADMIT-PAP-005】【TP_ADMIT_PAP_014】重置恢复默认
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 填入 `${sampleProductName}`
2. 点击「重 置」
3. 断言筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-PAP-005` 一致
###### 预期结果
筛选字段恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-PAP-006】【TP_ADMIT_PAP_018】无匹配结果空态(mock反例)
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 产品名称填入 `__NOT_EXIST_GOODS__99999`
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-PAP-006` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
### 产品准入申请 · 状态与列表
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PAP-007】【TP_ADMIT_PAP_022】列表核心列完整
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 断言表头含准入单号、产品编号、产品名称、规格型号、注册规格、注册型号、器械注册人、单位、操作
- 自动化断言:规划与 CSV `ADMIT-PAP-007` 一致
###### 预期结果
核心列可见;操作含「详情」「日志」。
---
##### 【P0】【TC-UI-ADMIT-PAP-008】【TP_ADMIT_PAP_020】切换待申请 Tab
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 点击「待申请」
2. 断言有数据时行不属于已生效/已作废;计数为 0 时为空态
- 自动化断言:规划与 CSV `ADMIT-PAP-008` 一致
###### 预期结果
待申请 Tab 与列表状态一致。
---
##### 【P1】【TC-UI-ADMIT-PAP-009】【TP_ADMIT_PAP_023】翻至第 2 页
- 前置条件:分页总数大于每页条数
- 操作步骤:
1. 记录第 1 页首行准入单号
2. 点击页码「2」或「下一页」
3. 断言页码高亮为 2,首行单号与第 1 页不同
- 自动化断言:规划与 CSV `ADMIT-PAP-009` 一致
###### 预期结果
翻页成功且数据更换。不足两页则 skip。
---
##### 【P1】【TC-UI-ADMIT-PAP-010】【TP_ADMIT_PAP_024】跳至指定页
- 前置条件:总页数不少于 2,分页存在「跳至」
- 操作步骤:
1. 在跳至输入框填入 `2` 并回车
2. 断言当前页为 2
- 自动化断言:规划与 CSV `ADMIT-PAP-010` 一致
###### 预期结果
跳转到第 2 页。无跳至或仅 1 页则 skip。
---
### 产品准入申请 · 新增与导入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PAP-011】【TP_ADMIT_PAP_027】打开新增产品后返回
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 点击「新增产品」
2. 断言可见产品名称、器械注册人、规格型号、注册证号及返回
3. 点击返回,不保存
- 自动化断言:规划与 CSV `ADMIT-PAP-011` 一致
###### 预期结果
新增页字段可见;返回后列表不新增记录。
---
##### 【P0】【TC-UI-ADMIT-PAP-012】【TP_ADMIT_PAP_029】新增取消不落库
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 记录分页总数 `${sampleTotal}`
2. 打开新增,产品名称填 `${uniqProductName}`(建议 `AUTO-PAP-${timestamp}`)后返回不保存
3. 按该名称查询,断言无此行,总数不变
- 自动化断言:规划与 CSV `ADMIT-PAP-012` 一致
###### 预期结果
取消后不产生新产品。
---
##### 【P1】【TC-UI-ADMIT-PAP-013】【TP_ADMIT_PAP_030】Excel 导入打开后取消
- 前置条件:已进入产品准入申请页
- 操作步骤:
1. 记录总数 `${sampleTotal}`
2. 点击「Excel导入」
3. 断言导入层打开
4. 关闭或取消,不选择文件
5. 断言总数不变
- 自动化断言:规划与 CSV `ADMIT-PAP-013` 一致
###### 预期结果
取消导入不增加产品。
---
#### 异常验证点
##### 【P0】【TC-UI-ADMIT-PAP-014】【TP_ADMIT_PAP_034】产品名称为空保存拦截(mock反例)
- 前置条件:已打开新增产品页
- 操作步骤:
1. 产品名称保持 mock 空值,其它能填的非名称字段可留空
2. 点击保存
3. 断言必填提示,页面不关闭
4. 返回列表,断言总数不变
- 自动化断言:规划与 CSV `ADMIT-PAP-014` 一致
###### 预期结果
保存被拦截;不落库。
---
### 产品准入申请 · 详情、编辑与作废
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-PAP-015】【TP_ADMIT_PAP_046】打开详情后返回
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 记录首行 `${sampleProductName}`
2. 点击「详情」,断言名称一致
3. 返回列表
- 自动化断言:规划与 CSV `ADMIT-PAP-015` 一致
###### 预期结果
详情与该行一致;返回后仍在产品准入申请列表。
---
##### 【P0】【TC-UI-ADMIT-PAP-016】【TP_ADMIT_PAP_047】待申请编辑回填
- 前置条件:待申请至少 1 行含「编辑」
- 操作步骤:
1. 读取该行 `${sampleProductName}`、`${sampleSpec}`
2. 点击「编辑」
3. 断言名称与规格型号回填一致
4. 返回不保存
- 自动化断言:规划与 CSV `ADMIT-PAP-016` 一致
###### 预期结果
编辑回填与列表行一致。无编辑按钮则 skip。
---
##### 【P1】【TC-UI-ADMIT-PAP-017】【TP_ADMIT_PAP_049】编辑取消不保存
- 前置条件:存在可编辑行
- 操作步骤:
1. 打开编辑,把产品名称改为 `${uniqProductName}` 后返回不保存
2. 再次打开,断言名称仍为原值
- 自动化断言:规划与 CSV `ADMIT-PAP-017` 一致
###### 预期结果
取消后数据不变。
---
##### 【P0】【TC-UI-ADMIT-PAP-018】【TP_ADMIT_PAP_041】作废确认后取消
- 前置条件:待申请至少 1 条可勾选
- 操作步骤:
1. 勾选 1 行并点击「作 废」
2. 断言确认框出现
3. 点击「取 消」
4. 断言该行仍在,状态未变为已作废
- 自动化断言:规划与 CSV `ADMIT-PAP-018` 一致
###### 预期结果
取消作废不改变状态。本条不点击确定。
---
##### 【P1】【TC-UI-ADMIT-PAP-019】【TP_ADMIT_PAP_051】已通过行不提供编辑
- 前置条件:已通过 Tab 计数大于 0
- 操作步骤:
1. 切换「已通过」
2. 断言首行无「编辑」,或打开后保存被拒绝
- 自动化断言:规划与 CSV `ADMIT-PAP-019` 一致
###### 预期结果
已通过行不能改写产品名称。计数为 0 则 skip。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **19** 条(P0=11 / P1=8) |
| 来源 | 从 56 条测试点选取可稳定自动化的主路径与关键反向 |
| 未纳入自动化 | 未登录/权限、合法新增落库、Excel 真实导入、确认生成申请单、一键生成、确认作废、跨单列表追溯 |
| 单一职责 | 每条只断言一个核心业务结果 |
# 基础管理-准入管理-供货目录申请 UI 自动化测试用例
**来源测试点**:`testpoint/基础管理-准入管理-供货目录申请-测试点分析-01.md`
**执行 CSV**:`testcase/基础管理-准入管理-供货目录申请-UI自动化测试用例-01.csv`
**页面 URL**:`/spd/basic/dataSync/dataSync/supplyApply/list`
**定位器 YAML**:`locators/spd/admit-supply.locator.yaml`
**元素扫描**:`data/scan/admit-supply-elements.json`(117 项)
**版本**:2026-09-22
**自动化框架**:Playwright + TypeScript(规划 `tests/spd/admit-supply.spec.ts`,依赖 `auth.setup` 登录态)
**通用前置**:已执行 `auth.setup`,`storageState` 有效;测试账号具备「基础设置 → 准入管理 → 供货目录申请」权限。
**页面约定**:整页渲染,**无报表 iframe**。
**菜单导航**:展开「基础设置 → 准入管理」后,点击 `.ant-menu-item` 文案精确为「供货目录申请」。
**写操作**:不提交新申请、不导入 Excel、不确认批量提交。新增页只做打开、取消和空提交拦截。
**动态取数约定**:
1. 默认查询后从首行读取 `${sampleOrderNo}`、`${sampleHospitalSupplier}`、`${sampleSecondSupplier}`、`${sampleBizMode}`、`${sampleDefaultFlag}`。
2. **禁止写死**供应商名称与申请单号。
3. 状态 Tab:全部、待提交、审批中、已通过、已驳回。无待提交行时,编辑与批量勾选用例 skip。
---
## 基础设置 · 准入管理
### 供货目录申请 · 页面进入
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-SUP-001】【TP_ADMIT_SUP_001】菜单进入供货目录申请页
- 前置条件:已登录且具备准入管理权限
- 操作步骤:
1. 按菜单「基础设置 → 准入管理 → 供货目录申请」进入
2. 断言 URL 含 `/spd/basic/dataSync/dataSync/supplyApply/list`
3. 断言可见「查 询」、「批量提交」、「新 增」及列表表头
- 自动化断言:规划与 CSV `ADMIT-SUP-001` 及 `tests/spd/admit-supply.spec.ts` 一致
###### 预期结果
进入供货目录申请页;不误入准入任务分配。
---
### 供货目录申请 · 筛选与状态
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-SUP-002】【TP_ADMIT_SUP_009】默认查询列表有数据或空态明确
- 前置条件:已进入供货目录申请页
- 操作步骤:
1. 点击「查 询」并等待列表稳定
2. 断言出现数据行,或「暂无数据」且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-SUP-002` 一致
###### 预期结果
查询无报错;有数据时分页「共 N 条」N≥1;无数据时空态明确。
---
##### 【P0】【TC-UI-ADMIT-SUP-003】【TP_ADMIT_SUP_010】按进院供应商筛选
- 前置条件:默认查询至少 1 条且进院供应商非空
- 操作步骤:
1. 从首行读取 `${sampleHospitalSupplier}`
2. 在进院供应商选择该值,制单日期保持默认,点击「查 询」
3. 断言结果行「进院供应商」与所选值一致
- 自动化断言:规划与 CSV `ADMIT-SUP-003` 一致
###### 预期结果
进院供应商列与条件一致。
---
##### 【P1】【TC-UI-ADMIT-SUP-004】【TP_ADMIT_SUP_012】重置恢复默认
- 前置条件:已选择进院供应商
- 操作步骤:
1. 点击「重 置」
2. 断言进院供应商等筛选恢复默认
- 自动化断言:规划与 CSV `ADMIT-SUP-004` 一致
###### 预期结果
筛选恢复默认;列表按默认规则刷新。
---
#### 异常验证点
##### 【P1】【TC-UI-ADMIT-SUP-005】【TP_ADMIT_SUP_019】变更单号无匹配空态(mock反例)
- 前置条件:已进入供货目录申请页
- 操作步骤:
1. 变更单号填入 `__NOT_EXIST_ORDER__99999`;若筛选区无此框,则在产品名称填同一 mock
2. 点击「查 询」
3. 断言空态且分页总数为 0
- 自动化断言:规划与 CSV `ADMIT-SUP-005` 一致
###### 预期结果
无匹配时不报错;总数为 0。
---
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-SUP-006】【TP_ADMIT_SUP_014】列表核心列完整
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 断言表头含申请单号、申请人、申请时间、进院供应商、二级供应商、业务模式、是否默认、备注、操作
- 自动化断言:规划与 CSV `ADMIT-SUP-006` 一致
###### 预期结果
核心列可见;操作含「编辑」或「详情」(随状态变化)。
---
##### 【P0】【TC-UI-ADMIT-SUP-007】【TP_ADMIT_SUP_013】切换待提交 Tab 且计数一致
- 前置条件:已进入供货目录申请页
- 操作步骤:
1. 点击「待提交」
2. 读取括号数量
3. 断言分页「共 N 条」等于该数量;有数据时状态为待提交
- 自动化断言:规划与 CSV `ADMIT-SUP-007` 一致
###### 预期结果
待提交 Tab 与分页总数一致。计数为 0 时为空态。
---
### 供货目录申请 · 新增与编辑
#### 功能验证点
##### 【P0】【TC-UI-ADMIT-SUP-008】【TP_ADMIT_SUP_021】打开新增供货目录
- 前置条件:已进入供货目录申请页
- 操作步骤:
1. 点击「新 增」
2. 断言可见进院供应商、二级供应商、业务模式、是否默认、计划生效时间、添加产品、提交
3. 返回不提交
- 自动化断言:规划与 CSV `ADMIT-SUP-008` 一致
###### 预期结果
新增页字段齐全;返回后列表不新增申请单。
---
##### 【P0】【TC-UI-ADMIT-SUP-009】【TP_ADMIT_SUP_026】新增放弃不落库
- 前置条件:已进入供货目录申请页
- 操作步骤:
1. 记录总数 `${sampleTotal}`
2. 打开新增,备注填 `${uniqRemark}`(建议 `AUTO-SUP-${timestamp}`)后返回不提交
3. 断言总数不变,列表无该备注
- 自动化断言:规划与 CSV `ADMIT-SUP-009` 一致
###### 预期结果
未提交不产生申请单。
---
##### 【P1】【TC-UI-ADMIT-SUP-010】【TP_ADMIT_SUP_048】业务模式与是否默认只切换不提交
- 前置条件:已打开新增页
- 操作步骤:
1. 展开业务模式、是否默认,断言存在可选项
2. 各选一项后返回,不提交
3. 断言列表总数不变
- 自动化断言:规划与 CSV `ADMIT-SUP-010` 一致
###### 预期结果
选项可见;不提交则无新单。
---
##### 【P0】【TC-UI-ADMIT-SUP-011】【TP_ADMIT_SUP_025】待提交编辑回填
- 前置条件:待提交至少 1 行含「编辑」
- 操作步骤:
1. 读取该行 `${sampleHospitalSupplier}`、`${sampleBizMode}`、`${sampleDefaultFlag}`
2. 点击「编辑」
3. 断言进院供应商、业务模式、是否默认与该行一致
4. 返回不提交
- 自动化断言:规划与 CSV `ADMIT-SUP-011` 一致
###### 预期结果
编辑回填与列表行一致。无待提交或无编辑则 skip。
---
##### 【P1】【TC-UI-ADMIT-SUP-012】【TP_ADMIT_SUP_026】编辑取消不保存
- 前置条件:存在可编辑的待提交行
- 操作步骤:
1. 打开编辑,把备注改为 `${uniqRemark}` 后返回不提交
2. 再次打开,断言备注仍为原值
- 自动化断言:规划与 CSV `ADMIT-SUP-012` 一致
###### 预期结果
取消后备注不变。
---
#### 异常验证点
##### 【P0】【TC-UI-ADMIT-SUP-013】【TP_ADMIT_SUP_030】进院供应商为空不可提交(mock反例)
- 前置条件:已打开新增页,进院供应商未选
- 操作步骤:
1. 不选进院供应商,点击「提 交」
2. 断言必填提示,页面不关闭
3. 返回列表,断言总数不变
- 自动化断言:规划与 CSV `ADMIT-SUP-013` 一致
###### 预期结果
提交被拦截;不产生申请单。
---
##### 【P0】【TC-UI-ADMIT-SUP-014】【TP_ADMIT_SUP_031】未添加产品不可提交
- 前置条件:已打开新增页,产品明细为 0
- 操作步骤:
1. 若进院供应商、二级供应商、业务模式可从样本选择则先选上,但不添加产品
2. 点击「提 交」
3. 断言拦截提示,明细仍为 0,列表总数不变
- 自动化断言:规划与 CSV `ADMIT-SUP-014` 一致
###### 预期结果
没有产品明细时不能提交。
---
### 供货目录申请 · 批量提交与详情
#### 功能验证点
##### 【P1】【TC-UI-ADMIT-SUP-015】【TP_ADMIT_SUP_042】未勾选时批量提交不可用
- 前置条件:已进入供货目录申请页,无勾选行
- 操作步骤:
1. 断言「批量提交」计数为 0,或按钮不可用
2. 若仍可点击,断言出现请选择提示,且无单据离开待提交
- 自动化断言:规划与 CSV `ADMIT-SUP-015` 一致
###### 预期结果
未勾选不提交任何申请单。
---
##### 【P0】【TC-UI-ADMIT-SUP-016】【TP_ADMIT_SUP_038】勾选后批量提交取消
- 前置条件:待提交至少 1 条
- 操作步骤:
1. 勾选 1 行,记录申请单号与状态
2. 点击「批量提交」
3. 若出现确认框,点「取 消」
4. 断言该单仍为待提交
- 自动化断言:规划与 CSV `ADMIT-SUP-016` 一致
###### 预期结果
取消批量提交不改变状态。本条不点击确定。无待提交则 skip。
---
##### 【P0】【TC-UI-ADMIT-SUP-017】【TP_ADMIT_SUP_039】打开详情后返回
- 前置条件:默认查询至少 1 条数据
- 操作步骤:
1. 点击首行「详情」
2. 断言可见「审批进程」「单据日志」「返 回」
3. 返回后 URL 仍含 `supplyApply/list`
- 自动化断言:规划与 CSV `ADMIT-SUP-017` 一致
###### 预期结果
详情可打开;返回后仍在供货目录申请列表。
---
## 质量与覆盖说明
| 项 | 说明 |
|----|------|
| 用例数 | **17** 条(P0=11 / P1=6) |
| 来源 | 从 48 条测试点选取查询、新增拦截、编辑回填、批量提交取消与详情 |
| 未纳入自动化 | 未登录/权限、真实提交、Excel 导入落库、确认批量提交、是否默认冲突后的供货关系回写 |
| 单一职责 | 每条只断言一个核心业务结果 |
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