Commit b8b4c69c authored by liguangyu06's avatar liguangyu06
Browse files

新增产品管理全链路自动化资产,并修复详情层/树页/路径串页等稳定问题。

parent 297e887d
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-物料信息变更-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-material-chg:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('物料信息变更 · 快捷筛选查询', () => {
test('PRODM-MCH-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.clickResetQuick();
await prodmMaterialChgPage.expectOnPage();
});
});
test.describe('物料信息变更 · 高级筛选抽屉', () => {
test('PRODM-MCH-002 全量查询条件组合查询', async ({ prodmMaterialChgPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
test('PRODM-MCH-003 点击高级筛选打开抽屉', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.openAdvancedFilterDrawer();
});
});
test.describe('物料信息变更 · 列表', () => {
test('PRODM-MCH-004 列表核心列完整', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.assertConfiguredHeaders();
});
test('PRODM-MCH-008 列设置隐藏后再恢复', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.clickQuery();
await prodmMaterialChgPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-MCH-009 横向滚动与列对齐', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.expectHorizontalScrollAlignment();
});
test('PRODM-MCH-010 无匹配空态(mock反例)', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.searchByMockKeyword();
const snap = await prodmMaterialChgPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('物料信息变更 · 行内操作', () => {
test('PRODM-MCH-005 行内「详情」可达(只读冒烟)', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.rowActionSmoke('详情');
});
test('PRODM-MCH-006 行内「编辑」可达(只读冒烟)', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.rowActionSmoke('编辑');
});
test('PRODM-MCH-007 行内「日志」可达(只读冒烟)', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.rowActionSmoke('日志');
});
});
test.describe('物料信息变更 · 分页', () => {
test('PRODM-MCH-011 有数据时总条数', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.assertTotalWhenHasData();
});
test('PRODM-MCH-012 切换至第 2 页', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.goToPage2ForProdm();
});
test('PRODM-MCH-013 切换20条每页页面正常且列表同步', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
const { total, rowsBefore, rowsAfter } = await prodmMaterialChgPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmMaterialChgPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('物料信息变更 · 打印', () => {
test('PRODM-MCH-014 按当前条件打印', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.clickPrintIfVisible();
});
});
test.describe('物料信息变更 · 新增', () => {
test('PRODM-MCH-015 打开「新增」对应弹窗/抽屉', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.openToolbarOverlay('新增');
await prodmMaterialChgPage.closeOverlay();
});
test('PRODM-MCH-016 「新增」取消不落库', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.cancelToolbarWithoutCommit('新增');
});
test('PRODM-MCH-017 「新增」必填为空拦截', async ({ prodmMaterialChgPage }) => {
await prodmMaterialChgPage.open();
await prodmMaterialChgPage.assertRequiredInterceptFor('新增');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-物料信息管理-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-material:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('物料信息管理 · 左侧耗材分类树', () => {
test('PRODM-MAT-001 树默认有选中或可展开节点', { tag: '@smoke' }, async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.expectTreeDefaultScope();
});
test('PRODM-MAT-002 切换树节点刷新右侧', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
const switched = await prodmMaterialPage.switchOtherTreeNode();
expect(switched, '应能切换树节点').toBeTruthy();
});
});
test.describe('物料信息管理 · 快捷筛选查询', () => {
test('PRODM-MAT-003 快捷区重置恢复默认', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.clickResetQuick();
await prodmMaterialPage.expectOnPage();
});
});
test.describe('物料信息管理 · 高级筛选抽屉', () => {
test('PRODM-MAT-004 全量查询条件组合查询', async ({ prodmMaterialPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
test('PRODM-MAT-005 点击高级筛选打开抽屉', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.openAdvancedFilterDrawer();
});
});
test.describe('物料信息管理 · 列表', () => {
test('PRODM-MAT-006 列表核心列完整', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.assertConfiguredHeaders();
});
test('PRODM-MAT-007 行内「详情」可达(只读冒烟)', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.rowActionSmoke('详情');
});
test('PRODM-MAT-008 列设置隐藏后再恢复', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.clickQuery();
await prodmMaterialPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-MAT-009 横向滚动与列对齐', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.expectHorizontalScrollAlignment();
});
test('PRODM-MAT-010 无匹配空态(mock反例)', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.searchByMockKeyword();
const snap = await prodmMaterialPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('物料信息管理 · 分页', () => {
test('PRODM-MAT-011 有数据时总条数', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.assertTotalWhenHasData();
});
test('PRODM-MAT-012 切换至第 2 页', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.goToPage2ForProdm();
});
test('PRODM-MAT-013 切换20条每页页面正常且列表同步', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
const { total, rowsBefore, rowsAfter } = await prodmMaterialPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmMaterialPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('物料信息管理 · 导出', () => {
test('PRODM-MAT-014 当前查询条件下导出', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.clickExportIfVisible();
});
});
test.describe('物料信息管理 · 添加', () => {
test('PRODM-MAT-015 打开「添加」对应弹窗/抽屉', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.openToolbarOverlay('添加');
await prodmMaterialPage.closeOverlay();
});
test('PRODM-MAT-016 「添加」取消不落库', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.cancelToolbarWithoutCommit('添加');
});
test('PRODM-MAT-017 「添加」必填为空拦截', async ({ prodmMaterialPage }) => {
await prodmMaterialPage.open();
await prodmMaterialPage.assertRequiredInterceptFor('添加');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-外围系统产品新增-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-peripheral-add:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('外围系统产品新增 · 快捷筛选查询', () => {
test('PRODM-PPA-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.clickResetQuick();
await prodmPeripheralAddPage.expectOnPage();
});
test('PRODM-PPA-002 全量可见条件组合查询', async ({ prodmPeripheralAddPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('外围系统产品新增 · 查询条件展开收起', () => {
test('PRODM-PPA-003 展开后更多条件可见', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.toggleFilterExpand();
});
});
test.describe('外围系统产品新增 · 列表', () => {
test('PRODM-PPA-004 列表核心列完整', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.assertConfiguredHeaders();
});
test('PRODM-PPA-005 行内「详情」可达(只读冒烟)', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.rowActionSmoke('详情');
});
test('PRODM-PPA-006 无匹配空态(mock反例)', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.searchByMockKeyword();
const snap = await prodmPeripheralAddPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('外围系统产品新增 · 分页', () => {
test('PRODM-PPA-007 有数据时总条数', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.assertTotalWhenHasData();
});
test('PRODM-PPA-008 切换至第 2 页', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.goToPage2ForProdm();
});
test('PRODM-PPA-009 切换20条每页页面正常且列表同步', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
const { total, rowsBefore, rowsAfter } = await prodmPeripheralAddPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmPeripheralAddPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('外围系统产品新增 · 导出', () => {
test('PRODM-PPA-010 当前查询条件下导出', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.clickExportIfVisible();
});
});
test.describe('外围系统产品新增 · 批量推送', () => {
test('PRODM-PPA-011 打开「批量推送」对应弹窗/抽屉', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.openToolbarOverlay('批量推送');
await prodmPeripheralAddPage.closeOverlay();
});
test('PRODM-PPA-012 「批量推送」取消不落库', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.cancelToolbarWithoutCommit('批量推送');
});
test('PRODM-PPA-013 「批量推送」必填为空拦截', async ({ prodmPeripheralAddPage }) => {
await prodmPeripheralAddPage.open();
await prodmPeripheralAddPage.assertRequiredInterceptFor('批量推送');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-外围系统产品变更管理-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-peripheral-chg:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('外围系统产品变更管理 · 快捷筛选查询', () => {
test('PRODM-PPC-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.clickResetQuick();
await prodmPeripheralChgPage.expectOnPage();
});
test('PRODM-PPC-002 全量可见条件组合查询', async ({ prodmPeripheralChgPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('外围系统产品变更管理 · 查询条件展开收起', () => {
test('PRODM-PPC-003 展开后更多条件可见', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.toggleFilterExpand();
});
});
test.describe('外围系统产品变更管理 · 列表', () => {
test('PRODM-PPC-004 列表核心列完整', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.assertConfiguredHeaders();
});
test('PRODM-PPC-007 无匹配空态(mock反例)', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.searchByMockKeyword();
const snap = await prodmPeripheralChgPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('外围系统产品变更管理 · 行内操作', () => {
test('PRODM-PPC-005 行内「详情」可达(只读冒烟)', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.rowActionSmoke('详情');
});
test('PRODM-PPC-006 行内「编辑」可达(只读冒烟)', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.rowActionSmoke('编辑');
});
});
test.describe('外围系统产品变更管理 · 分页', () => {
test('PRODM-PPC-008 有数据时总条数', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.assertTotalWhenHasData();
});
test('PRODM-PPC-009 切换至第 2 页', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
await prodmPeripheralChgPage.goToPage2ForProdm();
});
test('PRODM-PPC-010 切换20条每页页面正常且列表同步', async ({ prodmPeripheralChgPage }) => {
await prodmPeripheralChgPage.open();
const { total, rowsBefore, rowsAfter } = await prodmPeripheralChgPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmPeripheralChgPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-调价管理-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-price-adj:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('调价管理 · 快捷筛选查询', () => {
test('PRODM-PAD-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.clickResetQuick();
await prodmPriceAdjPage.expectOnPage();
});
});
test.describe('调价管理 · 高级筛选抽屉', () => {
test('PRODM-PAD-002 全量查询条件组合查询', async ({ prodmPriceAdjPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
test('PRODM-PAD-003 点击高级筛选打开抽屉', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.openAdvancedFilterDrawer();
});
});
test.describe('调价管理 · 列表', () => {
test('PRODM-PAD-004 列表核心列完整', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.assertConfiguredHeaders();
});
test('PRODM-PAD-008 列设置隐藏后再恢复', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.clickQuery();
await prodmPriceAdjPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-PAD-009 横向滚动与列对齐', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.expectHorizontalScrollAlignment();
});
test('PRODM-PAD-010 无匹配空态(mock反例)', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.searchByMockKeyword();
const snap = await prodmPriceAdjPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('调价管理 · 行内操作', () => {
test('PRODM-PAD-005 行内「再次调价」可达(只读冒烟)', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.rowActionSmoke('再次调价');
});
test('PRODM-PAD-006 行内「详情」可达(只读冒烟)', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.rowActionSmoke('详情');
});
test('PRODM-PAD-007 行内「打印」可达(只读冒烟)', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.rowActionSmoke('打印');
});
});
test.describe('调价管理 · 分页', () => {
test('PRODM-PAD-011 有数据时总条数', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.assertTotalWhenHasData();
});
test('PRODM-PAD-012 切换至第 2 页', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.goToPage2ForProdm();
});
test('PRODM-PAD-013 切换20条每页页面正常且列表同步', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
const { total, rowsBefore, rowsAfter } = await prodmPriceAdjPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmPriceAdjPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('调价管理 · 打印', () => {
test('PRODM-PAD-014 按当前条件打印', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.clickPrintIfVisible();
});
});
test.describe('调价管理 · 新增', () => {
test('PRODM-PAD-015 打开「新增」对应弹窗/抽屉', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.openToolbarOverlay('新增');
await prodmPriceAdjPage.closeOverlay();
});
test('PRODM-PAD-016 「新增」取消不落库', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.cancelToolbarWithoutCommit('新增');
});
test('PRODM-PAD-017 「新增」必填为空拦截', async ({ prodmPriceAdjPage }) => {
await prodmPriceAdjPage.open();
await prodmPriceAdjPage.assertRequiredInterceptFor('新增');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-产品物价核对-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-price-check:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('产品物价核对 · 快捷筛选查询', () => {
test('PRODM-PRC-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.clickResetQuick();
await prodmPriceCheckPage.expectOnPage();
});
test('PRODM-PRC-002 全量可见条件组合查询', async ({ prodmPriceCheckPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('产品物价核对 · 查询条件展开收起', () => {
test('PRODM-PRC-003 展开后更多条件可见', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.toggleFilterExpand();
});
});
test.describe('产品物价核对 · 列表', () => {
test('PRODM-PRC-004 列表核心列完整', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.assertConfiguredHeaders();
});
test('PRODM-PRC-008 无匹配空态(mock反例)', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.searchByMockKeyword();
const snap = await prodmPriceCheckPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('产品物价核对 · 行内操作', () => {
test('PRODM-PRC-005 行内「详情」可达(只读冒烟)', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.rowActionSmoke('详情');
});
test('PRODM-PRC-006 行内「审核」可达(只读冒烟)', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.rowActionSmoke('审核');
});
test('PRODM-PRC-007 行内「编辑」可达(只读冒烟)', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.rowActionSmoke('编辑');
});
});
test.describe('产品物价核对 · 分页', () => {
test('PRODM-PRC-009 有数据时总条数', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.assertTotalWhenHasData();
});
test('PRODM-PRC-010 切换至第 2 页', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.goToPage2ForProdm();
});
});
test.describe('产品物价核对 · 导出', () => {
test('PRODM-PRC-011 当前查询条件下导出', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.clickExportIfVisible();
});
});
test.describe('产品物价核对 · 批量审核', () => {
test('PRODM-PRC-012 打开「批量审核」对应弹窗/抽屉', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.openToolbarOverlay('批量审核');
await prodmPriceCheckPage.closeOverlay();
});
test('PRODM-PRC-013 「批量审核」取消不落库', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.cancelToolbarWithoutCommit('批量审核');
});
test('PRODM-PRC-014 「批量审核」必填为空拦截', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.assertRequiredInterceptFor('批量审核');
});
});
test.describe('产品物价核对 · 批量是否收费', () => {
test('PRODM-PRC-015 打开「批量是否收费」对应弹窗/抽屉', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.openToolbarOverlay('批量是否收费');
await prodmPriceCheckPage.closeOverlay();
});
test('PRODM-PRC-016 「批量是否收费」取消不落库', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.cancelToolbarWithoutCommit('批量是否收费');
});
test('PRODM-PRC-017 「批量是否收费」必填为空拦截', async ({ prodmPriceCheckPage }) => {
await prodmPriceCheckPage.open();
await prodmPriceCheckPage.assertRequiredInterceptFor('批量是否收费');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-产品资质一览-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-qual-overview:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('产品资质一览 · 快捷筛选查询', () => {
test('PRODM-QOV-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.clickResetQuick();
await prodmQualOverviewPage.expectOnPage();
});
test('PRODM-QOV-002 全量可见条件组合查询', async ({ prodmQualOverviewPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('产品资质一览 · 列表', () => {
test('PRODM-QOV-003 列表核心列完整', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.assertConfiguredHeaders();
});
test('PRODM-QOV-006 无匹配空态(mock反例)', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.searchByMockKeyword();
const snap = await prodmQualOverviewPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('产品资质一览 · 行内操作', () => {
test('PRODM-QOV-004 行内「详情」可达(只读冒烟)', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.rowActionSmoke('详情');
});
test('PRODM-QOV-005 行内「查看」可达(只读冒烟)', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.rowActionSmoke('查看');
});
});
test.describe('产品资质一览 · 分页', () => {
test('PRODM-QOV-007 有数据时总条数', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.assertTotalWhenHasData();
});
test('PRODM-QOV-008 切换至第 2 页', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.goToPage2ForProdm();
});
test('PRODM-QOV-009 切换20条每页页面正常且列表同步', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
const { total, rowsBefore, rowsAfter } = await prodmQualOverviewPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmQualOverviewPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('产品资质一览 · 导出', () => {
test('PRODM-QOV-010 当前查询条件下导出', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.clickExportIfVisible();
});
});
test.describe('产品资质一览 · 资质判断结果', () => {
test('PRODM-QOV-011 打开「资质判断结果」对应弹窗/抽屉', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.openToolbarOverlay('资质判断结果');
await prodmQualOverviewPage.closeOverlay();
});
test('PRODM-QOV-012 「资质判断结果」取消不落库', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.cancelToolbarWithoutCommit('资质判断结果');
});
test('PRODM-QOV-013 「资质判断结果」必填为空拦截', async ({ prodmQualOverviewPage }) => {
await prodmQualOverviewPage.open();
await prodmQualOverviewPage.assertRequiredInterceptFor('资质判断结果');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-产品资质齐全规则-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-qual-rule:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('产品资质齐全规则 · 快捷筛选查询', () => {
test('PRODM-QRL-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.clickResetQuick();
await prodmQualRulePage.expectOnPage();
});
test('PRODM-QRL-002 全量可见条件组合查询', async ({ prodmQualRulePage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('产品资质齐全规则 · 列表', () => {
test('PRODM-QRL-003 列表核心列完整', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.assertConfiguredHeaders();
});
test('PRODM-QRL-007 无匹配空态(mock反例)', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.searchByMockKeyword();
const snap = await prodmQualRulePage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('产品资质齐全规则 · 行内操作', () => {
test('PRODM-QRL-004 行内「详情」可达(只读冒烟)', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.rowActionSmoke('详情');
});
test('PRODM-QRL-005 行内「编辑」可达(只读冒烟)', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.rowActionSmoke('编辑');
});
test('PRODM-QRL-006 行内「日志」可达(只读冒烟)', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.rowActionSmoke('日志');
});
});
test.describe('产品资质齐全规则 · 分页', () => {
test('PRODM-QRL-008 有数据时总条数', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.assertTotalWhenHasData();
});
test('PRODM-QRL-009 切换至第 2 页', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.goToPage2ForProdm();
});
test('PRODM-QRL-010 切换20条每页页面正常且列表同步', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
const { total, rowsBefore, rowsAfter } = await prodmQualRulePage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmQualRulePage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('产品资质齐全规则 · 新增', () => {
test('PRODM-QRL-011 打开「新增」对应弹窗/抽屉', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.openToolbarOverlay('新增');
await prodmQualRulePage.closeOverlay();
});
test('PRODM-QRL-012 「新增」取消不落库', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.cancelToolbarWithoutCommit('新增');
});
test('PRODM-QRL-013 「新增」必填为空拦截', async ({ prodmQualRulePage }) => {
await prodmQualRulePage.open();
await prodmQualRulePage.assertRequiredInterceptFor('新增');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-请领出库渠道设置-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-req-channel:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('请领出库渠道设置 · 左侧规则目录树', () => {
test('PRODM-RCH-001 树默认有选中或可展开节点', { tag: '@smoke' }, async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.expectTreeDefaultScope();
});
test('PRODM-RCH-002 切换树节点刷新右侧', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
const switched = await prodmReqChannelPage.switchOtherTreeNode();
expect(switched, '应能切换树节点').toBeTruthy();
});
});
test.describe('请领出库渠道设置 · 快捷筛选查询', () => {
test('PRODM-RCH-003 快捷区重置恢复默认', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.clickResetQuick();
await prodmReqChannelPage.expectOnPage();
});
test('PRODM-RCH-004 全量可见条件组合查询', async ({ prodmReqChannelPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('请领出库渠道设置 · 列表', () => {
test('PRODM-RCH-005 列表核心列完整', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.assertConfiguredHeaders();
});
test('PRODM-RCH-009 列设置隐藏后再恢复', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.clickQuery();
await prodmReqChannelPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-RCH-010 横向滚动与列对齐', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.expectHorizontalScrollAlignment();
});
test('PRODM-RCH-011 无匹配空态(mock反例)', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.searchByMockKeyword();
const snap = await prodmReqChannelPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('请领出库渠道设置 · 行内操作', () => {
test('PRODM-RCH-006 行内「详情」可达(只读冒烟)', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.rowActionSmoke('详情');
});
test('PRODM-RCH-007 行内「编辑」可达(只读冒烟)', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.rowActionSmoke('编辑');
});
test('PRODM-RCH-008 行内「日志」可达(只读冒烟)', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.rowActionSmoke('日志');
});
});
test.describe('请领出库渠道设置 · 分页', () => {
test('PRODM-RCH-012 有数据时总条数', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.assertTotalWhenHasData();
});
test('PRODM-RCH-013 切换至第 2 页', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.goToPage2ForProdm();
});
test('PRODM-RCH-014 切换20条每页页面正常且列表同步', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
const { total, rowsBefore, rowsAfter } = await prodmReqChannelPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmReqChannelPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('请领出库渠道设置 · 导出', () => {
test('PRODM-RCH-015 当前查询条件下导出', async ({ prodmReqChannelPage }) => {
await prodmReqChannelPage.open();
await prodmReqChannelPage.clickExportIfVisible();
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-结算点设置-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-settle:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('结算点设置 · 左侧规则目录树', () => {
test('PRODM-STL-001 树默认有选中或可展开节点', { tag: '@smoke' }, async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.expectTreeDefaultScope();
});
test('PRODM-STL-002 切换树节点刷新右侧', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
const switched = await prodmSettlePage.switchOtherTreeNode();
expect(switched, '应能切换树节点').toBeTruthy();
});
});
test.describe('结算点设置 · 快捷筛选查询', () => {
test('PRODM-STL-003 快捷区重置恢复默认', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.clickResetQuick();
await prodmSettlePage.expectOnPage();
});
});
test.describe('结算点设置 · 高级筛选抽屉', () => {
test('PRODM-STL-004 全量查询条件组合查询', async ({ prodmSettlePage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
test('PRODM-STL-005 点击高级筛选打开抽屉', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.openAdvancedFilterDrawer();
});
});
test.describe('结算点设置 · 列表', () => {
test('PRODM-STL-006 列表核心列完整', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.assertConfiguredHeaders();
});
test('PRODM-STL-010 列设置隐藏后再恢复', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.clickQuery();
await prodmSettlePage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-STL-011 结算规则列升序降序切换', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.expectColumnSortAscDesc('结算规则');
});
test('PRODM-STL-012 横向滚动与列对齐', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.expectHorizontalScrollAlignment();
});
test('PRODM-STL-013 无匹配空态(mock反例)', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.searchByMockKeyword();
const snap = await prodmSettlePage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('结算点设置 · 行内操作', () => {
test('PRODM-STL-007 行内「详情」可达(只读冒烟)', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.rowActionSmoke('详情');
});
test('PRODM-STL-008 行内「编辑」可达(只读冒烟)', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.rowActionSmoke('编辑');
});
test('PRODM-STL-009 行内「日志」可达(只读冒烟)', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.rowActionSmoke('日志');
});
});
test.describe('结算点设置 · 分页', () => {
test('PRODM-STL-014 有数据时总条数', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.assertTotalWhenHasData();
});
test('PRODM-STL-015 切换至第 2 页', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
await prodmSettlePage.goToPage2ForProdm();
});
test('PRODM-STL-016 切换20条每页页面正常且列表同步', async ({ prodmSettlePage }) => {
await prodmSettlePage.open();
const { total, rowsBefore, rowsAfter } = await prodmSettlePage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmSettlePage.getTotalCount(), '总条数应不变').toBe(total);
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-缺货目录明细-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-stockout-detail:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('缺货目录明细 · 快捷筛选查询', () => {
test('PRODM-STD-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.clickResetQuick();
await prodmStockoutDetailPage.expectOnPage();
});
test('PRODM-STD-002 全量可见条件组合查询', async ({ prodmStockoutDetailPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('缺货目录明细 · 查询条件展开收起', () => {
test('PRODM-STD-003 展开后更多条件可见', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.toggleFilterExpand();
});
});
test.describe('缺货目录明细 · 列表', () => {
test('PRODM-STD-004 列表核心列完整', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.assertConfiguredHeaders();
});
test('PRODM-STD-007 无匹配空态(mock反例)', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.searchByMockKeyword();
const snap = await prodmStockoutDetailPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('缺货目录明细 · 行内操作', () => {
test('PRODM-STD-005 行内「详情」可达(只读冒烟)', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.rowActionSmoke('详情');
});
test('PRODM-STD-006 行内「查看」可达(只读冒烟)', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.rowActionSmoke('查看');
});
});
test.describe('缺货目录明细 · 分页', () => {
test('PRODM-STD-008 有数据时总条数', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.assertTotalWhenHasData();
});
test('PRODM-STD-009 切换至第 2 页', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.goToPage2ForProdm();
});
test('PRODM-STD-010 切换20条每页页面正常且列表同步', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
const { total, rowsBefore, rowsAfter } = await prodmStockoutDetailPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmStockoutDetailPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('缺货目录明细 · 导出', () => {
test('PRODM-STD-011 当前查询条件下导出', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.clickExportIfVisible();
});
});
test.describe('缺货目录明细 · 打印', () => {
test('PRODM-STD-012 按当前条件打印', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.clickPrintIfVisible();
});
});
test.describe('缺货目录明细 · 替代产品', () => {
test('PRODM-STD-013 打开「替代产品」对应弹窗/抽屉', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.openToolbarOverlay('替代产品');
await prodmStockoutDetailPage.closeOverlay();
});
test('PRODM-STD-014 「替代产品」取消不落库', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.cancelToolbarWithoutCommit('替代产品');
});
test('PRODM-STD-015 「替代产品」必填为空拦截', async ({ prodmStockoutDetailPage }) => {
await prodmStockoutDetailPage.open();
await prodmStockoutDetailPage.assertRequiredInterceptFor('替代产品');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-缺货目录维护-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-stockout:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('缺货目录维护 · 快捷筛选查询', () => {
test('PRODM-STO-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.clickResetQuick();
await prodmStockoutPage.expectOnPage();
});
test('PRODM-STO-002 全量可见条件组合查询', async ({ prodmStockoutPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('缺货目录维护 · 列表', () => {
test('PRODM-STO-003 列表核心列完整', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.assertConfiguredHeaders();
});
test('PRODM-STO-006 无匹配空态(mock反例)', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.searchByMockKeyword();
const snap = await prodmStockoutPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('缺货目录维护 · 行内操作', () => {
test('PRODM-STO-004 行内「详情」可达(只读冒烟)', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.rowActionSmoke('详情');
});
test('PRODM-STO-005 行内「编辑」可达(只读冒烟)', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.rowActionSmoke('编辑');
});
});
test.describe('缺货目录维护 · 分页', () => {
test('PRODM-STO-007 有数据时总条数', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.assertTotalWhenHasData();
});
test('PRODM-STO-008 切换至第 2 页', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.goToPage2ForProdm();
});
test('PRODM-STO-009 切换20条每页页面正常且列表同步', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
const { total, rowsBefore, rowsAfter } = await prodmStockoutPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmStockoutPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('缺货目录维护 · 导出', () => {
test('PRODM-STO-010 当前查询条件下导出', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.clickExportIfVisible();
});
});
test.describe('缺货目录维护 · 缺货信息维护', () => {
test('PRODM-STO-011 打开「缺货信息维护」对应弹窗/抽屉', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.openToolbarOverlay('缺货信息维护');
await prodmStockoutPage.closeOverlay();
});
test('PRODM-STO-012 「缺货信息维护」取消不落库', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.cancelToolbarWithoutCommit('缺货信息维护');
});
test('PRODM-STO-013 「缺货信息维护」必填为空拦截', async ({ prodmStockoutPage }) => {
await prodmStockoutPage.open();
await prodmStockoutPage.assertRequiredInterceptFor('缺货信息维护');
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-产品供应关系维护-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-supply:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('产品供应关系维护 · 左侧分类树', () => {
test('PRODM-SUP-001 树默认有选中或可展开节点', { tag: '@smoke' }, async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.expectTreeDefaultScope();
});
test('PRODM-SUP-002 切换树节点刷新右侧', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
const switched = await prodmSupplyPage.switchOtherTreeNode();
expect(switched, '应能切换树节点').toBeTruthy();
});
});
test.describe('产品供应关系维护 · 快捷筛选查询', () => {
test('PRODM-SUP-003 快捷区重置恢复默认', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.clickResetQuick();
await prodmSupplyPage.expectOnPage();
});
test('PRODM-SUP-004 全量可见条件组合查询', async ({ prodmSupplyPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
});
test.describe('产品供应关系维护 · 列表', () => {
test('PRODM-SUP-005 列表核心列完整', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.assertConfiguredHeaders();
});
test('PRODM-SUP-008 列设置隐藏后再恢复', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.clickQuery();
await prodmSupplyPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-SUP-009 销售商(自定义)列表列升序降序切换', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.expectColumnSortAscDesc('销售商(自定义)列表');
});
test('PRODM-SUP-010 横向滚动与列对齐', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.expectHorizontalScrollAlignment();
});
test('PRODM-SUP-011 无匹配空态(mock反例)', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.searchByMockKeyword();
const snap = await prodmSupplyPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('产品供应关系维护 · 行内操作', () => {
test('PRODM-SUP-006 行内「详情」可达(只读冒烟)', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.rowActionSmoke('详情');
});
test('PRODM-SUP-007 行内「编辑」可达(只读冒烟)', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.rowActionSmoke('编辑');
});
});
test.describe('产品供应关系维护 · 分页', () => {
test('PRODM-SUP-012 有数据时总条数', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.assertTotalWhenHasData();
});
test('PRODM-SUP-013 切换至第 2 页', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.goToPage2ForProdm();
});
test('PRODM-SUP-014 切换20条每页页面正常且列表同步', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
const { total, rowsBefore, rowsAfter } = await prodmSupplyPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmSupplyPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('产品供应关系维护 · 导出', () => {
test('PRODM-SUP-015 当前查询条件下导出', async ({ prodmSupplyPage }) => {
await prodmSupplyPage.open();
await prodmSupplyPage.clickExportIfVisible();
});
});
});
import { expect, test } from '../../fixtures';
/**
* 全量用例:与 testcase/基础管理-产品管理-院区单元包设置-UI自动化测试用例-01.csv 严格一致
* 运行:npm run test:prodm-unit-pkg:all
*/
test.describe('基础设置 · 产品管理', () => {
test.describe('院区单元包设置 · 快捷筛选查询', () => {
test('PRODM-UPK-001 快捷区重置恢复默认', { tag: '@smoke' }, async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.clickResetQuick();
await prodmUnitPkgPage.expectOnPage();
});
});
test.describe('院区单元包设置 · 高级筛选抽屉', () => {
test('PRODM-UPK-002 全量查询条件组合查询', async ({ prodmUnitPkgPage }) => {
test.skip(
true,
'组合查询须按页面配置 quickFields/drawerFields 实现 searchWithQuickAndDrawerCombo(对齐 center-report-sheet STAT-IOD-004),禁止临时启发式填表',
);
});
test('PRODM-UPK-003 点击高级筛选打开抽屉', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.openAdvancedFilterDrawer();
});
});
test.describe('院区单元包设置 · 列表', () => {
test('PRODM-UPK-004 列表核心列完整', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.assertConfiguredHeaders();
});
test('PRODM-UPK-008 列设置隐藏后再恢复', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.clickQuery();
await prodmUnitPkgPage.executeColumnSettingsToggleRestoreTest();
});
test('PRODM-UPK-009 横向滚动与列对齐', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.expectHorizontalScrollAlignment();
});
test('PRODM-UPK-010 无匹配空态(mock反例)', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.searchByMockKeyword();
const snap = await prodmUnitPkgPage.snapshotList();
expect(snap.rows === 0 || snap.emptyVisible, '无匹配应空态').toBeTruthy();
});
});
test.describe('院区单元包设置 · 行内操作', () => {
test('PRODM-UPK-005 行内「详情」可达(只读冒烟)', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.rowActionSmoke('详情');
});
test('PRODM-UPK-006 行内「编辑」可达(只读冒烟)', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.rowActionSmoke('编辑');
});
test('PRODM-UPK-007 行内「日志」可达(只读冒烟)', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.rowActionSmoke('日志');
});
});
test.describe('院区单元包设置 · 分页', () => {
test('PRODM-UPK-011 有数据时总条数', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.assertTotalWhenHasData();
});
test('PRODM-UPK-012 切换至第 2 页', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.goToPage2ForProdm();
});
test('PRODM-UPK-013 切换20条每页页面正常且列表同步', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
const { total, rowsBefore, rowsAfter } = await prodmUnitPkgPage.switchToPageSizeTwenty();
const expectedRows = Math.min(total, 20);
expect(rowsAfter, '当前页行数应与 20 条/页及总条数一致').toBe(expectedRows);
if (total > 20) {
expect(rowsAfter, '切换后可见行应随每页条数变化').not.toBe(rowsBefore);
}
expect(await prodmUnitPkgPage.getTotalCount(), '总条数应不变').toBe(total);
});
});
test.describe('院区单元包设置 · 导出', () => {
test('PRODM-UPK-014 当前查询条件下导出', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.clickExportIfVisible();
});
});
test.describe('院区单元包设置 · 新增', () => {
test('PRODM-UPK-015 打开「新增」对应弹窗/抽屉', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.openToolbarOverlay('新增');
await prodmUnitPkgPage.closeOverlay();
});
test('PRODM-UPK-016 「新增」取消不落库', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.cancelToolbarWithoutCommit('新增');
});
test('PRODM-UPK-017 「新增」必填为空拦截', async ({ prodmUnitPkgPage }) => {
await prodmUnitPkgPage.open();
await prodmUnitPkgPage.assertRequiredInterceptFor('新增');
});
});
});
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment