Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
test
autotest-playwright-web-spd
Commits
b8b4c69c
Commit
b8b4c69c
authored
Nov 04, 2026
by
liguangyu06
Browse files
新增产品管理全链路自动化资产,并修复详情层/树页/路径串页等稳定问题。
parent
297e887d
Changes
234
Hide whitespace changes
Inline
Side-by-side
testpoint/基础管理-产品管理-物料变更单明细查询-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-物料变更单明细查询 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-026.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/platform/zrchange`
**元素扫描**
:
`data/scan/prodm-material-chg-detail-elements.json`
(105 项)
**定位器**
:
`locators/spd/prodm-material-chg-detail.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 物料变更单明细查询
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_MCD_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/platform/zrchange`
(菜单或直链),筛选(可展开)、导出、物料变更明细列表与分页;左侧菜单与顶栏 Tab 高亮为物料变更单明细查询,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/platform/zrchange`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_MCD_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-026
---
### 快捷筛选查询
#### 功能验证点
-
*
*TP_PRODM_MCD_006
**
(高)|全量可见条件组合查询|验证要点:只填当前结果里有值的条件;结果同时满足已填条件|关联需求:UI-SPEC-SPD-PRODM-026
-
*
*TP_PRODM_MCD_005
**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
*
*TP_PRODM_MCD_007
**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-026
-
*
*TP_PRODM_MCD_008
**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
*
*TP_PRODM_MCD_009
**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-026
#### 集成验证点
-
*
*TP_PRODM_MCD_010
**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-026
---
### 查询条件展开收起
#### 功能验证点
-
**TP_PRODM_MCD_011**
(中)|展开后更多条件可见|验证要点:额外字段进入可视区且可填写、可参与查询;按钮变为「收起」|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_012**
(中)|收起后额外条件隐藏且已填值保留|验证要点:折叠行隐藏;已填值不丢失;再展开后值仍在。产品未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_013**
(低)|展开后无额外字段|验证要点:若产品无第二行筛选,展开为空或禁用,页面不报错|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
**TP_PRODM_MCD_014**
(低)|展开态查询失败|验证要点:展开后查询失败有提示,不误展示其它页缓存列表|关联需求:UI-SPEC-SPD-PRODM-026
#### 集成验证点
-
**TP_PRODM_MCD_015**
(中)|展开字段与扫描一致|验证要点:展开后可见字段与
`data/scan`
记录一致,不以邻页筛选字段代替|关联需求:UI-SPEC-SPD-PRODM-026
---
### 列表
#### 功能验证点
-
**TP_PRODM_MCD_021**
(高)|列表核心列完整|验证要点:主表展示 变更单号、物料、变更字段、时间等(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_022**
(中)|各可排序列升序降序|验证要点:每个带排序器的列均可升序、再降序;指示器(▲/▼ 或 aria-sort)与方向一致;列表仍有数据|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_023**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_MCD_024**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_025**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_026**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_027**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_028**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
**TP_PRODM_MCD_029**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-026
#### 集成验证点
-
**TP_PRODM_MCD_030**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-026
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_MCD_016**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-026
-
**TP_PRODM_MCD_017**
(高)|行内「查看」可达|验证要点:首行有数据时点「查看」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_018**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
**TP_PRODM_MCD_019**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-026
#### 集成验证点
-
**TP_PRODM_MCD_020**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-026
---
### 导出
#### 功能验证点
-
**TP_PRODM_MCD_031**
(高)|当前查询条件下导出|验证要点:先查询再导出;无报错。默认不校验文件内容|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_032**
(低)|无数据时导出|验证要点:空列表导出不报错或有明确提示|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
无(已并入:导出失败见写操作失败提示)
#### 集成验证点
-
无(已并入:导入模板与导出关系见写操作点)
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_MCD_033**
(中)|本页独有列与能力|验证要点:物料变更明细只读;勿与「变更单明细查询」产品侧混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-026
#### 边界验证点
-
**TP_PRODM_MCD_034**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/platform/zrchange`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-026
#### 异常验证点
-
**TP_PRODM_MCD_035**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-026
#### 集成验证点
-
**TP_PRODM_MCD_036**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-026
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选展开、列表分页、导出。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**36**
条原子测试点;扫描元素约 105 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_MCD`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;有 sorter:列表 H3 已写「各可排序列升序降序」;下游按 3.6 每列一条;页面无列设置齿轮(自检);页面无宽表启发式,未写横向滚动(自检);有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 有 sorter:列表 H3 已写「各可排序列升序降序」;下游按 3.6 每列一条;建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-结算点设置-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-结算点设置 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-012.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/platform/settle/rules`
**元素扫描**
:
`data/scan/prodm-settle-elements.json`
(206 项)
**定位器**
:
`locators/spd/prodm-settle.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 结算点设置
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_STL_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/platform/settle/rules`
(菜单或直链),左侧树(若有)+ 筛选+高级筛选、新增、列表与详情/日志;左侧菜单与顶栏 Tab 高亮为结算点设置,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/platform/settle/rules`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_STL_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-012
---
### 左侧规则目录树
#### 功能验证点
-
*
*TP_PRODM_STL_005
**
(高)|树默认有选中或可展开节点|验证要点:进入后左侧规则目录树可见,选中或展开后右侧数据范围与节点一致|关联需求:UI-SPEC-SPD-PRODM-012
-
*
*TP_PRODM_STL_006
**
(高)|树搜索过滤|验证要点:在树顶搜索框输入编号/名称关键字,节点列表收敛为匹配项|关联需求:UI-SPEC-SPD-PRODM-012
-
*
*TP_PRODM_STL_007
**
(高)|切换树节点刷新右侧|验证要点:点选另一节点后,右侧列表/表单数据范围切换,不残留上一节点数据|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
*
*TP_PRODM_STL_008
**
(低)|搜索无匹配|验证要点:无匹配节点时空态或提示,右侧不展示过期数据|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
*
*TP_PRODM_STL_009
**
(中)|树加载失败|验证要点:失败有提示,不把其它节点数据展示为当前节点成功态|关联需求:UI-SPEC-SPD-PRODM-012
#### 集成验证点
-
*
*TP_PRODM_STL_010
**
(中)|树节点与院区主数据一致|验证要点:节点名称/编码与科室登记等主数据一致(允许权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-012
---
### 快捷筛选查询
#### 功能验证点
-
**TP_PRODM_STL_011**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_012**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_013**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
**TP_PRODM_STL_014**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-012
#### 集成验证点
-
**TP_PRODM_STL_015**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-012
---
### 高级筛选抽屉
#### 功能验证点
-
**TP_PRODM_STL_016**
(高)|点击高级筛选打开抽屉|验证要点:标题为「高级筛选」;关键字段可交互|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_017**
(中)|抽屉内重置恢复默认|验证要点:抽屉字段恢复默认,快捷区不被清空|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_018**
(高)|全量查询条件组合查询|验证要点:快捷区 +(有则)维度勾选 + 抽屉全填样本非空字段;抽样首行同时满足全部已填条件|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
无(已并入:高级筛选字段边界见快捷区同类规则)
#### 异常验证点
-
无(已并入:高级筛选接口失败归入查询接口失败)
#### 集成验证点
-
**TP_PRODM_STL_019**
(中)|高级筛选带入|验证要点:快捷区同名字段带入抽屉且不手改,与快捷区一致(可选,见 rules 3.3)|关联需求:UI-SPEC-SPD-PRODM-012
---
### 列表
#### 功能验证点
-
**TP_PRODM_STL_026**
(高)|列表核心列完整|验证要点:主表展示 结算点规则、院区/产品范围等(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_027**
(中)|各可排序列升序降序|验证要点:每个带排序器的列均可升序、再降序;指示器(▲/▼ 或 aria-sort)与方向一致;列表仍有数据|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_028**
(低)|列设置隐藏后再恢复|验证要点:打开列设置 → 取消勾选非核心列 → 表头隐藏且勾选同步 → 再勾选后表头恢复|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_029**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_030**
(中)|横向滚动与列对齐|验证要点:远侧列可进入视口;表头列数=数据列数;对齐无重叠。列名以本页为准|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_STL_031**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_032**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_033**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_034**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_035**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
**TP_PRODM_STL_036**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-012
#### 集成验证点
-
**TP_PRODM_STL_037**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-012
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_STL_020**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_021**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-012
-
**TP_PRODM_STL_022**
(高)|行内「日志」可达|验证要点:首行有数据时点「日志」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_023**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
**TP_PRODM_STL_024**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-012
#### 集成验证点
-
**TP_PRODM_STL_025**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-012
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_STL_038**
(中)|本页独有列与能力|验证要点:结算点规则;勿与请领出库渠道设置混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-012
#### 边界验证点
-
**TP_PRODM_STL_039**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/platform/settle/rules`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-012
#### 异常验证点
-
**TP_PRODM_STL_040**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-012
#### 集成验证点
-
**TP_PRODM_STL_041**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-012
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选、列表分页、高级筛选、日志弹窗。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**41**
条原子测试点;扫描元素约 206 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_STL`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;有 sorter:列表 H3 已写「各可排序列升序降序」;下游按 3.6 每列一条;有列设置:列表 H3 已写「列设置隐藏后再恢复」;宽表已写「横向滚动与列对齐」;有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 有 sorter:列表 H3 已写「各可排序列升序降序」;下游按 3.6 每列一条;建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-缺货目录明细-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-缺货目录明细 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-021.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/paltform/stockoutList`
**元素扫描**
:
`data/scan/prodm-stockout-detail-elements.json`
(133 项)
**定位器**
:
`locators/spd/prodm-stockout-detail.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 缺货目录明细
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_STD_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/paltform/stockoutList`
(菜单或直链),筛选(可展开)、导出、明细列表与替代产品弹窗;左侧菜单与顶栏 Tab 高亮为缺货目录明细,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/paltform/stockoutList`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_STD_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-021
---
### 快捷筛选查询
#### 功能验证点
-
*
*TP_PRODM_STD_006
**
(高)|全量可见条件组合查询|验证要点:只填当前结果里有值的条件;结果同时满足已填条件|关联需求:UI-SPEC-SPD-PRODM-021
-
*
*TP_PRODM_STD_005
**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
*
*TP_PRODM_STD_007
**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-021
-
*
*TP_PRODM_STD_008
**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
*
*TP_PRODM_STD_009
**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
*
*TP_PRODM_STD_010
**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-021
---
### 查询条件展开收起
#### 功能验证点
-
**TP_PRODM_STD_011**
(中)|展开后更多条件可见|验证要点:额外字段进入可视区且可填写、可参与查询;按钮变为「收起」|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_012**
(中)|收起后额外条件隐藏且已填值保留|验证要点:折叠行隐藏;已填值不丢失;再展开后值仍在。产品未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_013**
(低)|展开后无额外字段|验证要点:若产品无第二行筛选,展开为空或禁用,页面不报错|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
**TP_PRODM_STD_014**
(低)|展开态查询失败|验证要点:展开后查询失败有提示,不误展示其它页缓存列表|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
**TP_PRODM_STD_015**
(中)|展开字段与扫描一致|验证要点:展开后可见字段与
`data/scan`
记录一致,不以邻页筛选字段代替|关联需求:UI-SPEC-SPD-PRODM-021
---
### 列表
#### 功能验证点
-
**TP_PRODM_STD_021**
(高)|列表核心列完整|验证要点:主表展示 缺货明细、替代产品相关列(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_022**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_STD_023**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_024**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_025**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_026**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_027**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
**TP_PRODM_STD_028**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
**TP_PRODM_STD_029**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-021
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_STD_016**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_017**
(高)|行内「查看」可达|验证要点:首行有数据时点「查看」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_018**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
**TP_PRODM_STD_019**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
**TP_PRODM_STD_020**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-021
---
### 导出
#### 功能验证点
-
**TP_PRODM_STD_030**
(高)|当前查询条件下导出|验证要点:先查询再导出;无报错。默认不校验文件内容|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_031**
(低)|无数据时导出|验证要点:空列表导出不报错或有明确提示|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
无(已并入:导出失败见写操作失败提示)
#### 集成验证点
-
无(已并入:导入模板与导出关系见写操作点)
---
### 打印
#### 功能验证点
-
**TP_PRODM_STD_032**
(高)|按当前条件打印|验证要点:能拉起对话框/预览/toast;无 error|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
无(已并入:无数据打印以现网为准)
#### 异常验证点
-
无(已并入:打印失败见写操作失败提示)
#### 集成验证点
-
无(已并入:批量打印见打印 H3)
---
### 替代产品
#### 功能验证点
-
**TP_PRODM_STD_033**
(高)|打开对应弹窗/抽屉|验证要点:触发「替代产品」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_034**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_035**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-021
-
**TP_PRODM_STD_036**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
**TP_PRODM_STD_037**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
**TP_PRODM_STD_038**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-021
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_STD_039**
(中)|本页独有列与能力|验证要点:缺货明细查询;勿与「缺货目录维护」混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-021
#### 边界验证点
-
**TP_PRODM_STD_040**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/paltform/stockoutList`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-021
#### 异常验证点
-
**TP_PRODM_STD_041**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-021
#### 集成验证点
-
**TP_PRODM_STD_042**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-021
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选展开、列表分页、导出、替代产品弹窗。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**42**
条原子测试点;扫描元素约 133 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_STD`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);页面无列设置齿轮(自检);页面无宽表启发式,未写横向滚动(自检);有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-缺货目录维护-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-缺货目录维护 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-019.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/paltform/stockoutManagement`
**元素扫描**
:
`data/scan/prodm-stockout-elements.json`
(162 项)
**定位器**
:
`locators/spd/prodm-stockout.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 缺货目录维护
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_STO_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/paltform/stockoutManagement`
(菜单或直链),筛选、导出、缺货维护弹窗、列表与详情;左侧菜单与顶栏 Tab 高亮为缺货目录维护,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/paltform/stockoutManagement`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_STO_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-019
---
### 快捷筛选查询
#### 功能验证点
-
*
*TP_PRODM_STO_006
**
(高)|全量可见条件组合查询|验证要点:只填当前结果里有值的条件;结果同时满足已填条件|关联需求:UI-SPEC-SPD-PRODM-019
-
*
*TP_PRODM_STO_005
**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
*
*TP_PRODM_STO_007
**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-019
-
*
*TP_PRODM_STO_008
**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
*
*TP_PRODM_STO_009
**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-019
#### 集成验证点
-
*
*TP_PRODM_STO_010
**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-019
---
### 列表
#### 功能验证点
-
**TP_PRODM_STO_016**
(高)|列表核心列完整|验证要点:主表展示 缺货产品、维护状态、替代品等(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_017**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_STO_018**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_019**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_020**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_021**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_022**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
**TP_PRODM_STO_023**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-019
#### 集成验证点
-
**TP_PRODM_STO_024**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-019
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_STO_011**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_012**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_013**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
**TP_PRODM_STO_014**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-019
#### 集成验证点
-
**TP_PRODM_STO_015**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-019
---
### 导出
#### 功能验证点
-
**TP_PRODM_STO_025**
(高)|当前查询条件下导出|验证要点:先查询再导出;无报错。默认不校验文件内容|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_026**
(低)|无数据时导出|验证要点:空列表导出不报错或有明确提示|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
无(已并入:导出失败见写操作失败提示)
#### 集成验证点
-
无(已并入:导入模板与导出关系见写操作点)
---
### 缺货信息维护
#### 功能验证点
-
**TP_PRODM_STO_027**
(高)|打开对应弹窗/抽屉|验证要点:触发「缺货信息维护」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_028**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_029**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-019
-
**TP_PRODM_STO_030**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
**TP_PRODM_STO_031**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-019
#### 集成验证点
-
**TP_PRODM_STO_032**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-019
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_STO_033**
(中)|本页独有列与能力|验证要点:缺货目录维护写操作;勿与「缺货目录明细」只读明细混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-019
#### 边界验证点
-
**TP_PRODM_STO_034**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/paltform/stockoutManagement`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-019
#### 异常验证点
-
**TP_PRODM_STO_035**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-019
#### 集成验证点
-
**TP_PRODM_STO_036**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-019
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选、列表分页、导出、缺货信息维护弹窗/详情。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**36**
条原子测试点;扫描元素约 162 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_STO`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);页面无列设置齿轮(自检);页面无宽表启发式,未写横向滚动(自检);有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-请领出库渠道设置-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-请领出库渠道设置 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-010.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/platform/apply/rules`
**元素扫描**
:
`data/scan/prodm-req-channel-elements.json`
(165 项)
**定位器**
:
`locators/spd/prodm-req-channel.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 请领出库渠道设置
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_RCH_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/platform/apply/rules`
(菜单或直链),左侧树(若有)+ 筛选+高级筛选、新增/导出、列表与详情/编辑/日志;左侧菜单与顶栏 Tab 高亮为请领出库渠道设置,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/platform/apply/rules`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_RCH_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-010
---
### 左侧规则目录树
#### 功能验证点
-
*
*TP_PRODM_RCH_005
**
(高)|树默认有选中或可展开节点|验证要点:进入后左侧规则目录树可见,选中或展开后右侧数据范围与节点一致|关联需求:UI-SPEC-SPD-PRODM-010
-
*
*TP_PRODM_RCH_006
**
(高)|树搜索过滤|验证要点:在树顶搜索框输入编号/名称关键字,节点列表收敛为匹配项|关联需求:UI-SPEC-SPD-PRODM-010
-
*
*TP_PRODM_RCH_007
**
(高)|切换树节点刷新右侧|验证要点:点选另一节点后,右侧列表/表单数据范围切换,不残留上一节点数据|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
*
*TP_PRODM_RCH_008
**
(低)|搜索无匹配|验证要点:无匹配节点时空态或提示,右侧不展示过期数据|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
*
*TP_PRODM_RCH_009
**
(中)|树加载失败|验证要点:失败有提示,不把其它节点数据展示为当前节点成功态|关联需求:UI-SPEC-SPD-PRODM-010
#### 集成验证点
-
*
*TP_PRODM_RCH_010
**
(中)|树节点与院区主数据一致|验证要点:节点名称/编码与科室登记等主数据一致(允许权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-010
---
### 快捷筛选查询
#### 功能验证点
-
**TP_PRODM_RCH_012**
(高)|全量可见条件组合查询|验证要点:只填当前结果里有值的条件;结果同时满足已填条件|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_011**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_013**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_014**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
**TP_PRODM_RCH_015**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-010
#### 集成验证点
-
**TP_PRODM_RCH_016**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-010
---
### 列表
#### 功能验证点
-
**TP_PRODM_RCH_023**
(高)|列表核心列完整|验证要点:主表展示 渠道规则、院区/库区、产品范围等(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_024**
(低)|列设置隐藏后再恢复|验证要点:打开列设置 → 取消勾选非核心列 → 表头隐藏且勾选同步 → 再勾选后表头恢复|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_025**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_026**
(中)|横向滚动与列对齐|验证要点:远侧列可进入视口;表头列数=数据列数;对齐无重叠。列名以本页为准|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_RCH_027**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_028**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_029**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_030**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_031**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
**TP_PRODM_RCH_032**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-010
#### 集成验证点
-
**TP_PRODM_RCH_033**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-010
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_RCH_017**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_018**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-010
-
**TP_PRODM_RCH_019**
(高)|行内「日志」可达|验证要点:首行有数据时点「日志」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_020**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
**TP_PRODM_RCH_021**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-010
#### 集成验证点
-
**TP_PRODM_RCH_022**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-010
---
### 导出
#### 功能验证点
-
**TP_PRODM_RCH_034**
(高)|当前查询条件下导出|验证要点:先查询再导出;无报错。默认不校验文件内容|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_035**
(低)|无数据时导出|验证要点:空列表导出不报错或有明确提示|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
无(已并入:导出失败见写操作失败提示)
#### 集成验证点
-
无(已并入:导入模板与导出关系见写操作点)
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_RCH_036**
(中)|本页独有列与能力|验证要点:请领出库渠道规则;勿与结算点设置混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-010
#### 边界验证点
-
**TP_PRODM_RCH_037**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/platform/apply/rules`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-010
#### 异常验证点
-
**TP_PRODM_RCH_038**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-010
#### 集成验证点
-
**TP_PRODM_RCH_039**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-010
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选、列表分页、导出、行内操作。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**39**
条原子测试点;扫描元素约 165 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_RCH`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);有列设置:列表 H3 已写「列设置隐藏后再恢复」;宽表已写「横向滚动与列对齐」;有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-调价管理-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-调价管理 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-013.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/platform/price`
**元素扫描**
:
`data/scan/prodm-price-adj-elements.json`
(225 项)
**定位器**
:
`locators/spd/prodm-price-adj.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 调价管理
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_PAD_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/platform/price`
(菜单或直链),筛选+高级筛选、新增/导入excel、调价单列表与再次调价/详情/打印/编辑;左侧菜单与顶栏 Tab 高亮为调价管理,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/platform/price`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_PAD_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-013
---
### 快捷筛选查询
#### 功能验证点
-
*
*TP_PRODM_PAD_005
**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
*
*TP_PRODM_PAD_006
**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-013
-
*
*TP_PRODM_PAD_007
**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
*
*TP_PRODM_PAD_008
**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
*
*TP_PRODM_PAD_009
**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-013
---
### 高级筛选抽屉
#### 功能验证点
-
**TP_PRODM_PAD_010**
(高)|点击高级筛选打开抽屉|验证要点:标题为「高级筛选」;关键字段可交互|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_011**
(中)|抽屉内重置恢复默认|验证要点:抽屉字段恢复默认,快捷区不被清空|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_012**
(高)|全量查询条件组合查询|验证要点:快捷区 +(有则)维度勾选 + 抽屉全填样本非空字段;抽样首行同时满足全部已填条件|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
无(已并入:高级筛选字段边界见快捷区同类规则)
#### 异常验证点
-
无(已并入:高级筛选接口失败归入查询接口失败)
#### 集成验证点
-
**TP_PRODM_PAD_013**
(中)|高级筛选带入|验证要点:快捷区同名字段带入抽屉且不手改,与快捷区一致(可选,见 rules 3.3)|关联需求:UI-SPEC-SPD-PRODM-013
---
### 列表
#### 功能验证点
-
**TP_PRODM_PAD_021**
(高)|列表核心列完整|验证要点:主表展示 单号、制单/计划/实际生效时间、备注、状态、销售商、供应商等|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_022**
(低)|列设置隐藏后再恢复|验证要点:打开列设置 → 取消勾选非核心列 → 表头隐藏且勾选同步 → 再勾选后表头恢复|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_023**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_024**
(中)|横向滚动与列对齐|验证要点:远侧列可进入视口;表头列数=数据列数;对齐无重叠。列名以本页为准|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_PAD_025**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_026**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_027**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_028**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_029**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
**TP_PRODM_PAD_030**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
**TP_PRODM_PAD_031**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-013
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_PAD_014**
(高)|行内「再次调价」可达|验证要点:首行有数据时点「再次调价」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_015**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_016**
(高)|行内「打印」可达|验证要点:首行有数据时点「打印」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_017**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_018**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
**TP_PRODM_PAD_019**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
**TP_PRODM_PAD_020**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-013
---
### 打印
#### 功能验证点
-
**TP_PRODM_PAD_032**
(高)|按当前条件打印|验证要点:能拉起对话框/预览/toast;无 error|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
无(已并入:无数据打印以现网为准)
#### 异常验证点
-
无(已并入:打印失败见写操作失败提示)
#### 集成验证点
-
无(已并入:批量打印见打印 H3)
---
### Excel 导入
#### 功能验证点
-
**TP_PRODM_PAD_033**
(中)|Excel 导入入口可触发|验证要点:点「Excel导入」/「导入excel」可打开导入流程,无未捕获异常(不校验文件字段级)|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
无(已并入:空文件/格式错误以现网提示为准)
#### 异常验证点
-
**TP_PRODM_PAD_034**
(中)|导入失败提示|验证要点:导入失败有明确错误信息,列表不误增|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
无(已并入:导入后与列表刷新以现网为准)
---
### 新增
#### 功能验证点
-
**TP_PRODM_PAD_035**
(高)|打开对应弹窗/抽屉|验证要点:触发「新增」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_036**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_037**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-013
-
**TP_PRODM_PAD_038**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
**TP_PRODM_PAD_039**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
**TP_PRODM_PAD_040**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-013
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_PAD_041**
(中)|本页独有列与能力|验证要点:调价单管理;状态在列表列,非独立状态 Tab;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-013
#### 边界验证点
-
**TP_PRODM_PAD_042**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/platform/price`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-013
#### 异常验证点
-
**TP_PRODM_PAD_043**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-013
#### 集成验证点
-
**TP_PRODM_PAD_044**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-013
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选、列表分页、新增/导入、详情与打印。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**44**
条原子测试点;扫描元素约 225 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_PAD`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);有列设置:列表 H3 已写「列设置隐藏后再恢复」;宽表已写「横向滚动与列对齐」;有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-院区产品设置-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-院区产品设置 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-007.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/paltform/area/calatog`
**元素扫描**
:
`data/scan/prodm-campus-elements.json`
(180 项)
**定位器**
:
`locators/spd/prodm-campus.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 院区产品设置
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_CAM_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/paltform/area/calatog`
(菜单或直链),左右分栏:左侧库区树、右侧筛选+高级筛选、导入/导出Excel/打印产品码/下发科室/批量调整、列表与详情/编辑/日志;左侧菜单与顶栏 Tab 高亮为院区产品设置,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/paltform/area/calatog`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_CAM_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-007
---
### 左侧请领下发库区树
#### 功能验证点
-
*
*TP_PRODM_CAM_005
**
(高)|树默认有选中或可展开节点|验证要点:进入后左侧请领下发库区树可见,选中或展开后右侧数据范围与节点一致|关联需求:UI-SPEC-SPD-PRODM-007
-
*
*TP_PRODM_CAM_006
**
(高)|树搜索过滤|验证要点:在树顶搜索框输入编号/名称关键字,节点列表收敛为匹配项|关联需求:UI-SPEC-SPD-PRODM-007
-
*
*TP_PRODM_CAM_007
**
(高)|切换树节点刷新右侧|验证要点:点选另一节点后,右侧列表/表单数据范围切换,不残留上一节点数据|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
*
*TP_PRODM_CAM_008
**
(低)|搜索无匹配|验证要点:无匹配节点时空态或提示,右侧不展示过期数据|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
*
*TP_PRODM_CAM_009
**
(中)|树加载失败|验证要点:失败有提示,不把其它节点数据展示为当前节点成功态|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
*
*TP_PRODM_CAM_010
**
(中)|树节点与院区主数据一致|验证要点:节点名称/编码与科室登记等主数据一致(允许权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-007
---
### 快捷筛选查询
#### 功能验证点
-
**TP_PRODM_CAM_011**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_012**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_013**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_014**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_015**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-007
---
### 高级筛选抽屉
#### 功能验证点
-
**TP_PRODM_CAM_016**
(高)|点击高级筛选打开抽屉|验证要点:标题为「高级筛选」;关键字段可交互|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_017**
(中)|抽屉内重置恢复默认|验证要点:抽屉字段恢复默认,快捷区不被清空|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_018**
(高)|全量查询条件组合查询|验证要点:快捷区 +(有则)维度勾选 + 抽屉全填样本非空字段;抽样首行同时满足全部已填条件|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
无(已并入:高级筛选字段边界见快捷区同类规则)
#### 异常验证点
-
无(已并入:高级筛选接口失败归入查询接口失败)
#### 集成验证点
-
**TP_PRODM_CAM_019**
(中)|高级筛选带入|验证要点:快捷区同名字段带入抽屉且不手改,与快捷区一致(可选,见 rules 3.3)|关联需求:UI-SPEC-SPD-PRODM-007
---
### 列表
#### 功能验证点
-
**TP_PRODM_CAM_026**
(高)|列表核心列完整|验证要点:主表展示 规格型号、耗材类型、默认上架货位、单位、库存上下限、单元含量、状态等|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_027**
(低)|列设置隐藏后再恢复|验证要点:打开列设置 → 取消勾选非核心列 → 表头隐藏且勾选同步 → 再勾选后表头恢复|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_028**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_029**
(中)|横向滚动与列对齐|验证要点:远侧列可进入视口;表头列数=数据列数;对齐无重叠。列名以本页为准|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_CAM_030**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_031**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_032**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_033**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_034**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_035**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_036**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-007
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_CAM_020**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_021**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_022**
(高)|行内「日志」可达|验证要点:首行有数据时点「日志」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_023**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_024**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_025**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-007
---
### 导入医院产品
#### 功能验证点
-
**TP_PRODM_CAM_037**
(高)|打开对应弹窗/抽屉|验证要点:触发「导入医院产品」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_038**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_039**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_040**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_041**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_042**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-007
---
### 一键导入
#### 功能验证点
-
**TP_PRODM_CAM_043**
(高)|打开对应弹窗/抽屉|验证要点:触发「一键导入」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_044**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_045**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_046**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_047**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_048**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-007
---
### 批量调整
#### 功能验证点
-
**TP_PRODM_CAM_049**
(高)|打开对应弹窗/抽屉|验证要点:触发「批量调整」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_050**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_051**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-007
-
**TP_PRODM_CAM_052**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_053**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_054**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-007
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_CAM_055**
(中)|本页独有列与能力|验证要点:院区→库区产品设置;勿与「中心库库区产品设置」「科室库区产品设置」混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-007
#### 边界验证点
-
**TP_PRODM_CAM_056**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/paltform/area/calatog`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-007
#### 异常验证点
-
**TP_PRODM_CAM_057**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-007
#### 集成验证点
-
**TP_PRODM_CAM_058**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-007
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、库区树、筛选、列表分页、导入导出打印、详情/日志弹窗。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**58**
条原子测试点;扫描元素约 180 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_CAM`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);有列设置:列表 H3 已写「列设置隐藏后再恢复」;宽表已写「横向滚动与列对齐」;有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
testpoint/基础管理-产品管理-院区单元包设置-测试点分析-01.md
0 → 100644
View file @
b8b4c69c
# 基础管理-产品管理-院区单元包设置 — 测试点分析
**版本**
:01
**定稿日期**
:2026-11-04
**关联需求**
:
`knowledge-base/08-UI专项规范库/UI-SPEC-SPD-PRODM-008.md`
**页面 URL**
:
`http://spdtest.cmic.com.cn:8080/spd/basic/goods/paltform/area/unit`
**元素扫描**
:
`data/scan/prodm-unit-pkg-elements.json`
(87 项)
**定位器**
:
`locators/spd/prodm-unit-pkg.locator.yaml`
**本次生成范围**
:
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
---
## 基础设置 · 产品管理 · 院区单元包设置
### 页面访问与导航
#### 功能验证点
-
**TP_PRODM_UPK_001**
(高)|页面主区加载完成|验证要点:携带有效登录态进入
`/spd/basic/goods/paltform/area/unit`
(菜单或直链),筛选+高级筛选、新增/导出/导入、列表与单元包详情;左侧菜单与顶栏 Tab 高亮为院区单元包设置,不误入同组其它产品管理页|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_002**
(中)|同组产品管理菜单可切换|验证要点:在 scope 所列产品管理 26 个子菜单中切换 2~3 个后 URL 与内容对应,再返回本页状态正确|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_003**
(低)|已登录直接打开 URL|验证要点:携带有效登录态打开
`/spd/basic/goods/paltform/area/unit`
,筛选区与列表(或左右分栏)可见,无报错遮罩,地址仍为该路径|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
无(未登录/会话过期/无菜单权限引用用户管理
`TP_USER_USR_005`
~
`007`
;本模块自动化不单独写「菜单进入」「未登录访问拦截」用例,见 ui-test-point-rules 3.5)
#### 集成验证点
-
**TP_PRODM_UPK_004**
(中)|顶栏院区与筛选默认一致|验证要点:顶栏当前院区与页面院区/库区树默认范围不矛盾(允许按权限裁剪)|关联需求:UI-SPEC-SPD-PRODM-008
---
### 快捷筛选查询
#### 功能验证点
-
*
*TP_PRODM_UPK_005
**
(中)|快捷区重置恢复默认|验证要点:已填字段(及维度勾选)恢复默认;列表是否刷新按产品规则,未定则标待评审|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
*
*TP_PRODM_UPK_006
**
(中)|超长文本关键字|验证要点:名称/编号类字段输入较长关键字,查询被接受或截断,页面不崩溃|关联需求:UI-SPEC-SPD-PRODM-008
-
*
*TP_PRODM_UPK_007
**
(低)|仅空格关键字|验证要点:按空查询或提示,不报错|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
*
*TP_PRODM_UPK_008
**
(中)|查询接口失败|验证要点:失败有错误提示,不白屏|关联需求:UI-SPEC-SPD-PRODM-008
#### 集成验证点
-
*
*TP_PRODM_UPK_009
**
(中)|筛选结果与分页总数一致|验证要点:查询后「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-008
---
### 高级筛选抽屉
#### 功能验证点
-
**TP_PRODM_UPK_010**
(高)|点击高级筛选打开抽屉|验证要点:标题为「高级筛选」;关键字段可交互|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_011**
(中)|抽屉内重置恢复默认|验证要点:抽屉字段恢复默认,快捷区不被清空|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_012**
(高)|全量查询条件组合查询|验证要点:快捷区 +(有则)维度勾选 + 抽屉全填样本非空字段;抽样首行同时满足全部已填条件|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
无(已并入:高级筛选字段边界见快捷区同类规则)
#### 异常验证点
-
无(已并入:高级筛选接口失败归入查询接口失败)
#### 集成验证点
-
**TP_PRODM_UPK_013**
(中)|高级筛选带入|验证要点:快捷区同名字段带入抽屉且不手改,与快捷区一致(可选,见 rules 3.3)|关联需求:UI-SPEC-SPD-PRODM-008
---
### 列表
#### 功能验证点
-
**TP_PRODM_UPK_020**
(高)|列表核心列完整|验证要点:主表展示 单元包名称/编码、院区、产品含量相关列(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_021**
(低)|列设置隐藏后再恢复|验证要点:打开列设置 → 取消勾选非核心列 → 表头隐藏且勾选同步 → 再勾选后表头恢复|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_022**
(中)|无匹配空列表|验证要点:不存在的关键字查询后表头仍在,0 行或空态;有汇总时为 0 或「-」|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_023**
(中)|横向滚动与列对齐|验证要点:远侧列可进入视口;表头列数=数据列数;对齐无重叠。列名以本页为准|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
无(已并入:列表加载失败见查询接口失败)
#### 集成验证点
-
无(已并入:行内操作见行内操作 H3 或本页无行操作)
---
### 分页
#### 功能验证点
-
**TP_PRODM_UPK_024**
(高)|有数据时总条数|验证要点:「共 N 条」与本次查询匹配条数一致|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_025**
(高)|切换至第 2 页|验证要点:页码高亮且首行更换;不足 2 页则该点不适用|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_026**
(中)|切换每页条数|验证要点:默认档位(常见 50)→「20 条/页」;共 N 条不变;当前页行数=min(N,20) 且与切换前不同(见 3.7)|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_027**
(中)|首页上一页不可用|验证要点:第 1 页时「上一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_028**
(中)|末页下一页不可用|验证要点:最后一页时「下一页」禁用或无效|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
**TP_PRODM_UPK_029**
(低)|跳至非数字页码|验证要点:非法输入不跳转异常页|关联需求:UI-SPEC-SPD-PRODM-008
#### 集成验证点
-
**TP_PRODM_UPK_030**
(中)|翻页不丢失筛选|验证要点:带筛选翻页后条件保持,新页仍满足原筛选|关联需求:UI-SPEC-SPD-PRODM-008
---
### 行内操作
#### 功能验证点
-
**TP_PRODM_UPK_014**
(高)|行内「详情」可达|验证要点:首行有数据时点「详情」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_015**
(高)|行内「编辑」可达|验证要点:首行有数据时点「编辑」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_016**
(高)|行内「日志」可达|验证要点:首行有数据时点「日志」有反馈或进入预期层(只读冒烟,不写外围回写)|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_017**
(低)|末行或无数据|验证要点:无数据时空态,行内按钮不可用或不可见(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
**TP_PRODM_UPK_018**
(中)|操作失败提示|验证要点:接口失败时有提示,列表行状态不误改为成功|关联需求:UI-SPEC-SPD-PRODM-008
#### 集成验证点
-
**TP_PRODM_UPK_019**
(低)|一对多备注|验证要点:下游用例可按每个行内操作各拆一条;本页已按操作拆功能点|关联需求:UI-SPEC-SPD-PRODM-008
---
### 导出
#### 功能验证点
-
**TP_PRODM_UPK_031**
(高)|当前查询条件下导出|验证要点:先查询再导出;无报错。默认不校验文件内容|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_032**
(低)|无数据时导出|验证要点:空列表导出不报错或有明确提示|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
无(已并入:导出失败见写操作失败提示)
#### 集成验证点
-
无(已并入:导入模板与导出关系见写操作点)
---
### 新增
#### 功能验证点
-
**TP_PRODM_UPK_033**
(高)|打开对应弹窗/抽屉|验证要点:触发「新增」后弹窗/抽屉可见,标题与关键字段可交互;取消不落库(范围内才写保存)|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_034**
(中)|取消不落库|验证要点:填写后取消或关闭,列表不新增/不修改对应记录|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_035**
(中)|必填为空拦截|验证要点:必填项为空时确定被拦截并提示,不落库|关联需求:UI-SPEC-SPD-PRODM-008
-
**TP_PRODM_UPK_036**
(低)|重复打开|验证要点:连续两次打开不叠加多层遮罩|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
**TP_PRODM_UPK_037**
(中)|保存失败|验证要点:接口失败时弹窗不自动关闭且列表保持原状|关联需求:UI-SPEC-SPD-PRODM-008
#### 集成验证点
-
**TP_PRODM_UPK_038**
(低)|弹窗字段与列表列一致|验证要点:弹窗内关键字段与列表展示字段命名一致|关联需求:UI-SPEC-SPD-PRODM-008
---
### 与同组产品管理页差异
#### 功能验证点
-
**TP_PRODM_UPK_039**
(中)|本页独有列与能力|验证要点:院区单元包配置;勿与「院区产品设置」库区产品列表混淆;与同组它页切换后列集/工具栏差异可辨识|关联需求:UI-SPEC-SPD-PRODM-008
#### 边界验证点
-
**TP_PRODM_UPK_040**
(低)|直链不误展示它页列|验证要点:仅打开本页 URL
`/spd/basic/goods/paltform/area/unit`
时不应出现它页独有工具栏(如错页 Tab)|关联需求:UI-SPEC-SPD-PRODM-008
#### 异常验证点
-
**TP_PRODM_UPK_041**
(中)|菜单高亮与 URL 一致|验证要点:左侧高亮菜单名、顶栏 Tab 与地址栏路径同属本页,非兄弟页 URL|关联需求:UI-SPEC-SPD-PRODM-008
#### 集成验证点
-
**TP_PRODM_UPK_042**
(低)|跨页数据不串行|验证要点:从本页切至它页再返回,本页筛选/列表恢复为本页数据域,不残留它页查询条件(以现网为准)|关联需求:UI-SPEC-SPD-PRODM-008
---
## 质量自检摘要
| 项 | 结论 |
|----|------|
| 范围 | 在范围内:导航、筛选、列表分页、导出、单元包详情。排除:断网/弱网、导出文件内容、弹窗全字段落库、登录/改密通用流程(见
`testpoint/scope/基础管理-产品管理-UI测试点范围.md`
)。未声称 100% 全覆盖。 |
| 范围外未覆盖 | 全局左侧菜单与顶栏导航噪声、导出/打印文件字节内容、弹窗/抽屉全字段组合与真实落库、断网/弱网 |
| 覆盖 | 已写功能域见正文 H3;共
**42**
条原子测试点;扫描元素约 87 项 |
| 分类 | 功能 / 边界 / 异常 / 集成四类均已按功能点拆分 |
| 去重 | 登录态过期、无菜单权限、改密引用
`TP_USER_USR_006`
/
`007`
,本页不展开。编号前缀
`TP_PRODM_UPK`
|
| 待评审项 | 写操作冒烟不提交脏数据;筛选收起后字段是否保留;部分详情层标题可能受顶栏 Tab 干扰需现网复核;页面无列头 sorter(自检);有列设置:列表 H3 已写「列设置隐藏后再恢复」;宽表已写「横向滚动与列对齐」;有每页条数下拉:已写「切换每页条数」 |
| 功能点拆分 | 未使用「筛选与查询 / 列表与分页」;快捷与高级筛选分开;有展开则单开查询条件展开收起;列表→分页→导出;写操作 H3 用业务名 |
| 报表能力 | 整页渲染,非统计报表 iframe 第四节清单 |
| 列排序下游 | 页面无列头 sorter(自检);建议
`audit-sort-columns-live`
维护
`data/spd-admin-sort-columns.json`
|
| 分页每页条数 | 有每页条数下拉:已写「切换每页条数」 |
| 下游 | 可转 testcases/MD、CSV;扫描
`npm run discover:scan-prodm`
;overlay
`npm run discover:scan-prodm-overlays`
;测试点
`npm run generate:testpoints-prodm`
|
tests/spd/prodm-campus.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-院区产品设置-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-campus:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
院区产品设置 · 左侧请领下发库区树
'
,
()
=>
{
test
(
'
PRODM-CAM-001 树默认有选中或可展开节点
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
expectTreeDefaultScope
();
});
test
(
'
PRODM-CAM-002 切换树节点刷新右侧
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
const
switched
=
await
prodmCampusPage
.
switchOtherTreeNode
();
expect
(
switched
,
'
应能切换树节点
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
院区产品设置 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CAM-003 快捷区重置恢复默认
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
clickResetQuick
();
await
prodmCampusPage
.
expectOnPage
();
});
});
test
.
describe
(
'
院区产品设置 · 高级筛选抽屉
'
,
()
=>
{
test
(
'
PRODM-CAM-004 全量查询条件组合查询
'
,
async
({
prodmCampusPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
test
(
'
PRODM-CAM-005 点击高级筛选打开抽屉
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
openAdvancedFilterDrawer
();
});
});
test
.
describe
(
'
院区产品设置 · 列表
'
,
()
=>
{
test
(
'
PRODM-CAM-006 列表核心列完整
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CAM-010 列设置隐藏后再恢复
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
clickQuery
();
await
prodmCampusPage
.
executeColumnSettingsToggleRestoreTest
();
});
test
(
'
PRODM-CAM-011 横向滚动与列对齐
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
expectHorizontalScrollAlignment
();
});
test
(
'
PRODM-CAM-012 无匹配空态(mock反例)
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
searchByMockKeyword
();
const
snap
=
await
prodmCampusPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
院区产品设置 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-CAM-007 行内「详情」可达(只读冒烟)
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-CAM-008 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-CAM-009 行内「日志」可达(只读冒烟)
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
rowActionSmoke
(
'
日志
'
);
});
});
test
.
describe
(
'
院区产品设置 · 分页
'
,
()
=>
{
test
(
'
PRODM-CAM-013 有数据时总条数
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CAM-014 切换至第 2 页
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CAM-015 切换20条每页页面正常且列表同步
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmCampusPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmCampusPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
院区产品设置 · 导入医院产品
'
,
()
=>
{
test
(
'
PRODM-CAM-016 打开「导入医院产品」对应弹窗/抽屉
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
openToolbarOverlay
(
'
导入医院产品
'
);
await
prodmCampusPage
.
closeOverlay
();
});
test
(
'
PRODM-CAM-017 「导入医院产品」取消不落库
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
cancelToolbarWithoutCommit
(
'
导入医院产品
'
);
});
test
(
'
PRODM-CAM-018 「导入医院产品」必填为空拦截
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
assertRequiredInterceptFor
(
'
导入医院产品
'
);
});
});
test
.
describe
(
'
院区产品设置 · 一键导入
'
,
()
=>
{
test
(
'
PRODM-CAM-019 打开「一键导入」对应弹窗/抽屉
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
openToolbarOverlay
(
'
一键导入
'
);
await
prodmCampusPage
.
closeOverlay
();
});
test
(
'
PRODM-CAM-020 「一键导入」取消不落库
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
cancelToolbarWithoutCommit
(
'
一键导入
'
);
});
test
(
'
PRODM-CAM-021 「一键导入」必填为空拦截
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
assertRequiredInterceptFor
(
'
一键导入
'
);
});
});
test
.
describe
(
'
院区产品设置 · 批量调整
'
,
()
=>
{
test
(
'
PRODM-CAM-022 打开「批量调整」对应弹窗/抽屉
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
openToolbarOverlay
(
'
批量调整
'
);
await
prodmCampusPage
.
closeOverlay
();
});
test
(
'
PRODM-CAM-023 「批量调整」取消不落库
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
cancelToolbarWithoutCommit
(
'
批量调整
'
);
});
test
(
'
PRODM-CAM-024 「批量调整」必填为空拦截
'
,
async
({
prodmCampusPage
})
=>
{
await
prodmCampusPage
.
open
();
await
prodmCampusPage
.
assertRequiredInterceptFor
(
'
批量调整
'
);
});
});
});
tests/spd/prodm-center-limit-ai.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-中心库上下限建议(AI)-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-center-limit-ai:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
中心库上下限建议(AI) · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CLA-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
clickResetQuick
();
await
prodmCenterLimitAiPage
.
expectOnPage
();
});
test
(
'
PRODM-CLA-002 全量可见条件组合查询
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-CLA-003 展开后更多条件可见
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 列表
'
,
()
=>
{
test
(
'
PRODM-CLA-004 列表核心列完整
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CLA-008 无匹配空态(mock反例)
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
searchByMockKeyword
();
const
snap
=
await
prodmCenterLimitAiPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 行内操作
'
,
()
=>
{
test
(
'
PRODM-CLA-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-CLA-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-CLA-007 行内「调整」可达(只读冒烟)
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
rowActionSmoke
(
'
调整
'
);
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 分页
'
,
()
=>
{
test
(
'
PRODM-CLA-009 有数据时总条数
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CLA-010 切换至第 2 页
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CLA-011 切换20条每页页面正常且列表同步
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmCenterLimitAiPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmCenterLimitAiPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 导出
'
,
()
=>
{
test
(
'
PRODM-CLA-012 当前查询条件下导出
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 打印
'
,
()
=>
{
test
(
'
PRODM-CLA-013 按当前条件打印
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
clickPrintIfVisible
();
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 全部调整
'
,
()
=>
{
test
(
'
PRODM-CLA-014 打开「全部调整」对应弹窗/抽屉
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
openToolbarOverlay
(
'
全部调整
'
);
await
prodmCenterLimitAiPage
.
closeOverlay
();
});
test
(
'
PRODM-CLA-015 「全部调整」取消不落库
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
cancelToolbarWithoutCommit
(
'
全部调整
'
);
});
test
(
'
PRODM-CLA-016 「全部调整」必填为空拦截
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
assertRequiredInterceptFor
(
'
全部调整
'
);
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 批量调整
'
,
()
=>
{
test
(
'
PRODM-CLA-017 打开「批量调整」对应弹窗/抽屉
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
openToolbarOverlay
(
'
批量调整
'
);
await
prodmCenterLimitAiPage
.
closeOverlay
();
});
test
(
'
PRODM-CLA-018 「批量调整」取消不落库
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
cancelToolbarWithoutCommit
(
'
批量调整
'
);
});
test
(
'
PRODM-CLA-019 「批量调整」必填为空拦截
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
assertRequiredInterceptFor
(
'
批量调整
'
);
});
});
test
.
describe
(
'
中心库上下限建议(AI) · 采纳
'
,
()
=>
{
test
(
'
PRODM-CLA-020 打开「采纳」对应弹窗/抽屉
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
openToolbarOverlay
(
'
采纳
'
);
await
prodmCenterLimitAiPage
.
closeOverlay
();
});
test
(
'
PRODM-CLA-021 「采纳」取消不落库
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
cancelToolbarWithoutCommit
(
'
采纳
'
);
});
test
(
'
PRODM-CLA-022 「采纳」必填为空拦截
'
,
async
({
prodmCenterLimitAiPage
})
=>
{
await
prodmCenterLimitAiPage
.
open
();
await
prodmCenterLimitAiPage
.
assertRequiredInterceptFor
(
'
采纳
'
);
});
});
});
tests/spd/prodm-center-limit.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-中心库上下限建议-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-center-limit:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
中心库上下限建议 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CLM-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
clickResetQuick
();
await
prodmCenterLimitPage
.
expectOnPage
();
});
test
(
'
PRODM-CLM-002 全量可见条件组合查询
'
,
async
({
prodmCenterLimitPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
中心库上下限建议 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-CLM-003 展开后更多条件可见
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
中心库上下限建议 · 列表
'
,
()
=>
{
test
(
'
PRODM-CLM-004 列表核心列完整
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CLM-008 无匹配空态(mock反例)
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
searchByMockKeyword
();
const
snap
=
await
prodmCenterLimitPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
中心库上下限建议 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-CLM-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-CLM-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-CLM-007 行内「调整」可达(只读冒烟)
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
rowActionSmoke
(
'
调整
'
);
});
});
test
.
describe
(
'
中心库上下限建议 · 分页
'
,
()
=>
{
test
(
'
PRODM-CLM-009 有数据时总条数
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CLM-010 切换至第 2 页
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CLM-011 切换20条每页页面正常且列表同步
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmCenterLimitPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmCenterLimitPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
中心库上下限建议 · 导出
'
,
()
=>
{
test
(
'
PRODM-CLM-012 当前查询条件下导出
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
中心库上下限建议 · 打印
'
,
()
=>
{
test
(
'
PRODM-CLM-013 按当前条件打印
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
clickPrintIfVisible
();
});
});
test
.
describe
(
'
中心库上下限建议 · 全部调整
'
,
()
=>
{
test
(
'
PRODM-CLM-014 打开「全部调整」对应弹窗/抽屉
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
openToolbarOverlay
(
'
全部调整
'
);
await
prodmCenterLimitPage
.
closeOverlay
();
});
test
(
'
PRODM-CLM-015 「全部调整」取消不落库
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
cancelToolbarWithoutCommit
(
'
全部调整
'
);
});
test
(
'
PRODM-CLM-016 「全部调整」必填为空拦截
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
assertRequiredInterceptFor
(
'
全部调整
'
);
});
});
test
.
describe
(
'
中心库上下限建议 · 批量调整
'
,
()
=>
{
test
(
'
PRODM-CLM-017 打开「批量调整」对应弹窗/抽屉
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
openToolbarOverlay
(
'
批量调整
'
);
await
prodmCenterLimitPage
.
closeOverlay
();
});
test
(
'
PRODM-CLM-018 「批量调整」取消不落库
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
cancelToolbarWithoutCommit
(
'
批量调整
'
);
});
test
(
'
PRODM-CLM-019 「批量调整」必填为空拦截
'
,
async
({
prodmCenterLimitPage
})
=>
{
await
prodmCenterLimitPage
.
open
();
await
prodmCenterLimitPage
.
assertRequiredInterceptFor
(
'
批量调整
'
);
});
});
});
tests/spd/prodm-center-zone.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-中心库库区产品设置-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-center-zone:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
中心库库区产品设置 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CZO-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
clickResetQuick
();
await
prodmCenterZonePage
.
expectOnPage
();
});
});
test
.
describe
(
'
中心库库区产品设置 · 高级筛选抽屉
'
,
()
=>
{
test
(
'
PRODM-CZO-002 全量查询条件组合查询
'
,
async
({
prodmCenterZonePage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
test
(
'
PRODM-CZO-003 点击高级筛选打开抽屉
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
openAdvancedFilterDrawer
();
});
});
test
.
describe
(
'
中心库库区产品设置 · 列表
'
,
()
=>
{
test
(
'
PRODM-CZO-004 列表核心列完整
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CZO-007 列设置隐藏后再恢复
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
clickQuery
();
await
prodmCenterZonePage
.
executeColumnSettingsToggleRestoreTest
();
});
test
(
'
PRODM-CZO-008 横向滚动与列对齐
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
expectHorizontalScrollAlignment
();
});
test
(
'
PRODM-CZO-009 无匹配空态(mock反例)
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
searchByMockKeyword
();
const
snap
=
await
prodmCenterZonePage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
中心库库区产品设置 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-CZO-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-CZO-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
rowActionSmoke
(
'
编辑
'
);
});
});
test
.
describe
(
'
中心库库区产品设置 · 分页
'
,
()
=>
{
test
(
'
PRODM-CZO-010 有数据时总条数
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CZO-011 切换至第 2 页
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CZO-012 切换20条每页页面正常且列表同步
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmCenterZonePage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmCenterZonePage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
中心库库区产品设置 · 导出
'
,
()
=>
{
test
(
'
PRODM-CZO-013 当前查询条件下导出
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
中心库库区产品设置 · 添加中心库库区产品
'
,
()
=>
{
test
(
'
PRODM-CZO-014 打开「添加中心库库区产品」对应弹窗/抽屉
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
openToolbarOverlay
(
'
添加中心库库区产品
'
);
await
prodmCenterZonePage
.
closeOverlay
();
});
test
(
'
PRODM-CZO-015 「添加中心库库区产品」取消不落库
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
cancelToolbarWithoutCommit
(
'
添加中心库库区产品
'
);
});
test
(
'
PRODM-CZO-016 「添加中心库库区产品」必填为空拦截
'
,
async
({
prodmCenterZonePage
})
=>
{
await
prodmCenterZonePage
.
open
();
await
prodmCenterZonePage
.
assertRequiredInterceptFor
(
'
添加中心库库区产品
'
);
});
});
});
tests/spd/prodm-change-detail.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-变更单明细查询-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-change-detail:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
变更单明细查询 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CHD-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
clickResetQuick
();
await
prodmChangeDetailPage
.
expectOnPage
();
});
test
(
'
PRODM-CHD-002 全量可见条件组合查询
'
,
async
({
prodmChangeDetailPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
变更单明细查询 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-CHD-003 展开后更多条件可见
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
变更单明细查询 · 列表
'
,
()
=>
{
test
(
'
PRODM-CHD-004 列表核心列完整
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CHD-005 物料名称列升序降序切换
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
expectColumnSortAscDesc
(
'
物料名称
'
);
});
test
(
'
PRODM-CHD-006 无匹配空态(mock反例)
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
searchByMockKeyword
();
const
snap
=
await
prodmChangeDetailPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
变更单明细查询 · 分页
'
,
()
=>
{
test
(
'
PRODM-CHD-007 有数据时总条数
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CHD-008 切换至第 2 页
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CHD-009 切换20条每页页面正常且列表同步
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmChangeDetailPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmChangeDetailPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
变更单明细查询 · 导出
'
,
()
=>
{
test
(
'
PRODM-CHD-010 当前查询条件下导出
'
,
async
({
prodmChangeDetailPage
})
=>
{
await
prodmChangeDetailPage
.
open
();
await
prodmChangeDetailPage
.
clickExportIfVisible
();
});
});
});
tests/spd/prodm-check-reinit.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品核对重新发起-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-check-reinit:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品核对重新发起 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-CHK-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
clickResetQuick
();
await
prodmCheckReinitPage
.
expectOnPage
();
});
test
(
'
PRODM-CHK-002 全量可见条件组合查询
'
,
async
({
prodmCheckReinitPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
产品核对重新发起 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-CHK-003 展开后更多条件可见
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
产品核对重新发起 · 状态 Tab
'
,
()
=>
{
test
(
'
PRODM-CHK-004 状态 Tab 与列表一致
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
clickStatusTabs
();
});
});
test
.
describe
(
'
产品核对重新发起 · 列表
'
,
()
=>
{
test
(
'
PRODM-CHK-005 列表核心列完整
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-CHK-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-CHK-007 无匹配空态(mock反例)
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
searchByMockKeyword
();
const
snap
=
await
prodmCheckReinitPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品核对重新发起 · 分页
'
,
()
=>
{
test
(
'
PRODM-CHK-008 有数据时总条数
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-CHK-009 切换至第 2 页
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-CHK-010 切换20条每页页面正常且列表同步
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmCheckReinitPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmCheckReinitPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
产品核对重新发起 · 导出
'
,
()
=>
{
test
(
'
PRODM-CHK-011 当前查询条件下导出
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
产品核对重新发起 · 重新发起审核
'
,
()
=>
{
test
(
'
PRODM-CHK-012 打开「重新发起审核」对应弹窗/抽屉
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
openToolbarOverlay
(
'
重新发起审核
'
);
await
prodmCheckReinitPage
.
closeOverlay
();
});
test
(
'
PRODM-CHK-013 「重新发起审核」取消不落库
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
cancelToolbarWithoutCommit
(
'
重新发起审核
'
);
});
test
(
'
PRODM-CHK-014 「重新发起审核」必填为空拦截
'
,
async
({
prodmCheckReinitPage
})
=>
{
await
prodmCheckReinitPage
.
open
();
await
prodmCheckReinitPage
.
assertRequiredInterceptFor
(
'
重新发起审核
'
);
});
});
});
tests/spd/prodm-di-change.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品DI变更-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-di-change:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品DI变更 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-DIC-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
clickResetQuick
();
await
prodmDiChangePage
.
expectOnPage
();
});
test
(
'
PRODM-DIC-002 全量可见条件组合查询
'
,
async
({
prodmDiChangePage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
产品DI变更 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-DIC-003 展开后更多条件可见
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
产品DI变更 · 列表
'
,
()
=>
{
test
(
'
PRODM-DIC-004 列表核心列完整
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-DIC-008 列设置隐藏后再恢复
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
clickQuery
();
await
prodmDiChangePage
.
executeColumnSettingsToggleRestoreTest
();
});
test
(
'
PRODM-DIC-009 横向滚动与列对齐
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
expectHorizontalScrollAlignment
();
});
test
(
'
PRODM-DIC-010 无匹配空态(mock反例)
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
searchByMockKeyword
();
const
snap
=
await
prodmDiChangePage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品DI变更 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-DIC-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-DIC-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-DIC-007 行内「日志」可达(只读冒烟)
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
rowActionSmoke
(
'
日志
'
);
});
});
test
.
describe
(
'
产品DI变更 · 分页
'
,
()
=>
{
test
(
'
PRODM-DIC-011 有数据时总条数
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-DIC-012 切换至第 2 页
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
await
prodmDiChangePage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-DIC-013 切换20条每页页面正常且列表同步
'
,
async
({
prodmDiChangePage
})
=>
{
await
prodmDiChangePage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmDiChangePage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmDiChangePage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
});
tests/spd/prodm-di-query.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品DI查询-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-di-query:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品DI查询 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-DIQ-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
clickResetQuick
();
await
prodmDiQueryPage
.
expectOnPage
();
});
test
(
'
PRODM-DIQ-002 全量可见条件组合查询
'
,
async
({
prodmDiQueryPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
产品DI查询 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-DIQ-003 展开后更多条件可见
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
产品DI查询 · 列表
'
,
()
=>
{
test
(
'
PRODM-DIQ-004 列表核心列完整
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-DIQ-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-DIQ-006 无匹配空态(mock反例)
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
searchByMockKeyword
();
const
snap
=
await
prodmDiQueryPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品DI查询 · 分页
'
,
()
=>
{
test
(
'
PRODM-DIQ-007 有数据时总条数
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-DIQ-008 切换至第 2 页
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-DIQ-009 切换20条每页页面正常且列表同步
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmDiQueryPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmDiQueryPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
产品DI查询 · 导出
'
,
()
=>
{
test
(
'
PRODM-DIQ-010 当前查询条件下导出
'
,
async
({
prodmDiQueryPage
})
=>
{
await
prodmDiQueryPage
.
open
();
await
prodmDiQueryPage
.
clickExportIfVisible
();
});
});
});
tests/spd/prodm-first-audit.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品初审核对-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-first-audit:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品初审核对 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-FAU-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
clickResetQuick
();
await
prodmFirstAuditPage
.
expectOnPage
();
});
test
(
'
PRODM-FAU-002 全量可见条件组合查询
'
,
async
({
prodmFirstAuditPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
产品初审核对 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-FAU-003 展开后更多条件可见
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
产品初审核对 · 列表
'
,
()
=>
{
test
(
'
PRODM-FAU-004 列表核心列完整
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-FAU-008 无匹配空态(mock反例)
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
searchByMockKeyword
();
const
snap
=
await
prodmFirstAuditPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品初审核对 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-FAU-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-FAU-006 行内「审核」可达(只读冒烟)
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
rowActionSmoke
(
'
审核
'
);
});
test
(
'
PRODM-FAU-007 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
rowActionSmoke
(
'
编辑
'
);
});
});
test
.
describe
(
'
产品初审核对 · 分页
'
,
()
=>
{
test
(
'
PRODM-FAU-009 有数据时总条数
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-FAU-010 切换至第 2 页
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-FAU-011 切换20条每页页面正常且列表同步
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmFirstAuditPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmFirstAuditPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
产品初审核对 · 导出
'
,
()
=>
{
test
(
'
PRODM-FAU-012 当前查询条件下导出
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
产品初审核对 · 产品初审核对
'
,
()
=>
{
test
(
'
PRODM-FAU-013 打开「产品初审核对」对应弹窗/抽屉
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
openToolbarOverlay
(
'
产品初审核对
'
);
await
prodmFirstAuditPage
.
closeOverlay
();
});
test
(
'
PRODM-FAU-014 「产品初审核对」取消不落库
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
cancelToolbarWithoutCommit
(
'
产品初审核对
'
);
});
test
(
'
PRODM-FAU-015 「产品初审核对」必填为空拦截
'
,
async
({
prodmFirstAuditPage
})
=>
{
await
prodmFirstAuditPage
.
open
();
await
prodmFirstAuditPage
.
assertRequiredInterceptFor
(
'
产品初审核对
'
);
});
});
});
tests/spd/prodm-info-change.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品信息变更-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-info-change:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品信息变更 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-ICH-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
clickResetQuick
();
await
prodmInfoChangePage
.
expectOnPage
();
});
});
test
.
describe
(
'
产品信息变更 · 高级筛选抽屉
'
,
()
=>
{
test
(
'
PRODM-ICH-002 全量查询条件组合查询
'
,
async
({
prodmInfoChangePage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
test
(
'
PRODM-ICH-003 点击高级筛选打开抽屉
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
openAdvancedFilterDrawer
();
});
});
test
.
describe
(
'
产品信息变更 · 列表
'
,
()
=>
{
test
(
'
PRODM-ICH-004 列表核心列完整
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-ICH-008 列设置隐藏后再恢复
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
clickQuery
();
await
prodmInfoChangePage
.
executeColumnSettingsToggleRestoreTest
();
});
test
(
'
PRODM-ICH-009 横向滚动与列对齐
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
expectHorizontalScrollAlignment
();
});
test
(
'
PRODM-ICH-010 无匹配空态(mock反例)
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
searchByMockKeyword
();
const
snap
=
await
prodmInfoChangePage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品信息变更 · 行内操作
'
,
()
=>
{
test
(
'
PRODM-ICH-005 行内「详情」可达(只读冒烟)
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-ICH-006 行内「编辑」可达(只读冒烟)
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
rowActionSmoke
(
'
编辑
'
);
});
test
(
'
PRODM-ICH-007 行内「日志」可达(只读冒烟)
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
rowActionSmoke
(
'
日志
'
);
});
});
test
.
describe
(
'
产品信息变更 · 分页
'
,
()
=>
{
test
(
'
PRODM-ICH-011 有数据时总条数
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-ICH-012 切换至第 2 页
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-ICH-013 切换20条每页页面正常且列表同步
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmInfoChangePage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmInfoChangePage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
产品信息变更 · 打印
'
,
()
=>
{
test
(
'
PRODM-ICH-014 按当前条件打印
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
clickPrintIfVisible
();
});
});
test
.
describe
(
'
产品信息变更 · 新增
'
,
()
=>
{
test
(
'
PRODM-ICH-015 打开「新增」对应弹窗/抽屉
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
openToolbarOverlay
(
'
新增
'
);
await
prodmInfoChangePage
.
closeOverlay
();
});
test
(
'
PRODM-ICH-016 「新增」取消不落库
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
cancelToolbarWithoutCommit
(
'
新增
'
);
});
test
(
'
PRODM-ICH-017 「新增」必填为空拦截
'
,
async
({
prodmInfoChangePage
})
=>
{
await
prodmInfoChangePage
.
open
();
await
prodmInfoChangePage
.
assertRequiredInterceptFor
(
'
新增
'
);
});
});
});
tests/spd/prodm-maintain.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-产品维护-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-maintain:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
产品维护 · 左侧耗材分类树
'
,
()
=>
{
test
(
'
PRODM-MNT-001 树默认有选中或可展开节点
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
expectTreeDefaultScope
();
});
test
(
'
PRODM-MNT-002 切换树节点刷新右侧
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
const
switched
=
await
prodmMaintainPage
.
switchOtherTreeNode
();
expect
(
switched
,
'
应能切换树节点
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品维护 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-MNT-003 快捷区重置恢复默认
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
clickResetQuick
();
await
prodmMaintainPage
.
expectOnPage
();
});
});
test
.
describe
(
'
产品维护 · 高级筛选抽屉
'
,
()
=>
{
test
(
'
PRODM-MNT-004 全量查询条件组合查询
'
,
async
({
prodmMaintainPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
test
(
'
PRODM-MNT-005 点击高级筛选打开抽屉
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
openAdvancedFilterDrawer
();
});
});
test
.
describe
(
'
产品维护 · 列表
'
,
()
=>
{
test
(
'
PRODM-MNT-006 列表核心列完整
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-MNT-007 行内「详情」可达(只读冒烟)
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
rowActionSmoke
(
'
详情
'
);
});
test
(
'
PRODM-MNT-008 列设置隐藏后再恢复
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
clickQuery
();
await
prodmMaintainPage
.
executeColumnSettingsToggleRestoreTest
();
});
test
(
'
PRODM-MNT-009 横向滚动与列对齐
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
expectHorizontalScrollAlignment
();
});
test
(
'
PRODM-MNT-010 无匹配空态(mock反例)
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
searchByMockKeyword
();
const
snap
=
await
prodmMaintainPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
产品维护 · 分页
'
,
()
=>
{
test
(
'
PRODM-MNT-011 有数据时总条数
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-MNT-012 切换至第 2 页
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-MNT-013 切换20条每页页面正常且列表同步
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmMaintainPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmMaintainPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
产品维护 · 导出
'
,
()
=>
{
test
(
'
PRODM-MNT-014 当前查询条件下导出
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
clickExportIfVisible
();
});
});
test
.
describe
(
'
产品维护 · 分类维护
'
,
()
=>
{
test
(
'
PRODM-MNT-015 打开「分类维护」对应弹窗/抽屉
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
openToolbarOverlay
(
'
分类维护
'
);
await
prodmMaintainPage
.
closeOverlay
();
});
test
(
'
PRODM-MNT-016 「分类维护」取消不落库
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
cancelToolbarWithoutCommit
(
'
分类维护
'
);
});
test
(
'
PRODM-MNT-017 「分类维护」必填为空拦截
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
assertRequiredInterceptFor
(
'
分类维护
'
);
});
});
test
.
describe
(
'
产品维护 · 添加
'
,
()
=>
{
test
(
'
PRODM-MNT-018 打开「添加」对应弹窗/抽屉
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
openToolbarOverlay
(
'
添加
'
);
await
prodmMaintainPage
.
closeOverlay
();
});
test
(
'
PRODM-MNT-019 「添加」取消不落库
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
cancelToolbarWithoutCommit
(
'
添加
'
);
});
test
(
'
PRODM-MNT-020 「添加」必填为空拦截
'
,
async
({
prodmMaintainPage
})
=>
{
await
prodmMaintainPage
.
open
();
await
prodmMaintainPage
.
assertRequiredInterceptFor
(
'
添加
'
);
});
});
});
tests/spd/prodm-material-chg-detail.spec.ts
0 → 100644
View file @
b8b4c69c
import
{
expect
,
test
}
from
'
../../fixtures
'
;
/**
* 全量用例:与 testcase/基础管理-产品管理-物料变更单明细查询-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-material-chg-detail:all
*/
test
.
describe
(
'
基础设置 · 产品管理
'
,
()
=>
{
test
.
describe
(
'
物料变更单明细查询 · 快捷筛选查询
'
,
()
=>
{
test
(
'
PRODM-MCD-001 快捷区重置恢复默认
'
,
{
tag
:
'
@smoke
'
},
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
clickResetQuick
();
await
prodmMaterialChgDetailPage
.
expectOnPage
();
});
test
(
'
PRODM-MCD-002 全量可见条件组合查询
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
test
.
skip
(
true
,
'
组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表
'
,
);
});
});
test
.
describe
(
'
物料变更单明细查询 · 查询条件展开收起
'
,
()
=>
{
test
(
'
PRODM-MCD-003 展开后更多条件可见
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
toggleFilterExpand
();
});
});
test
.
describe
(
'
物料变更单明细查询 · 列表
'
,
()
=>
{
test
(
'
PRODM-MCD-004 列表核心列完整
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
assertConfiguredHeaders
();
});
test
(
'
PRODM-MCD-005 物料编号列升序降序切换
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
expectColumnSortAscDesc
(
'
物料编号
'
);
});
test
(
'
PRODM-MCD-006 无匹配空态(mock反例)
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
searchByMockKeyword
();
const
snap
=
await
prodmMaterialChgDetailPage
.
snapshotList
();
expect
(
snap
.
rows
===
0
||
snap
.
emptyVisible
,
'
无匹配应空态
'
).
toBeTruthy
();
});
});
test
.
describe
(
'
物料变更单明细查询 · 分页
'
,
()
=>
{
test
(
'
PRODM-MCD-007 有数据时总条数
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
assertTotalWhenHasData
();
});
test
(
'
PRODM-MCD-008 切换至第 2 页
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
goToPage2ForProdm
();
});
test
(
'
PRODM-MCD-009 切换20条每页页面正常且列表同步
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
const
{
total
,
rowsBefore
,
rowsAfter
}
=
await
prodmMaterialChgDetailPage
.
switchToPageSizeTwenty
();
const
expectedRows
=
Math
.
min
(
total
,
20
);
expect
(
rowsAfter
,
'
当前页行数应与 20 条/页及总条数一致
'
).
toBe
(
expectedRows
);
if
(
total
>
20
)
{
expect
(
rowsAfter
,
'
切换后可见行应随每页条数变化
'
).
not
.
toBe
(
rowsBefore
);
}
expect
(
await
prodmMaterialChgDetailPage
.
getTotalCount
(),
'
总条数应不变
'
).
toBe
(
total
);
});
});
test
.
describe
(
'
物料变更单明细查询 · 导出
'
,
()
=>
{
test
(
'
PRODM-MCD-010 当前查询条件下导出
'
,
async
({
prodmMaterialChgDetailPage
})
=>
{
await
prodmMaterialChgDetailPage
.
open
();
await
prodmMaterialChgDetailPage
.
clickExportIfVisible
();
});
});
});
Prev
1
…
7
8
9
10
11
12
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment