|
|
@@ -19,10 +19,14 @@ const testUsers = JSON.parse(readFileSync(join(__dirname, '../../fixtures/test-u
|
|
|
* 6. 数据导出(如功能可用)
|
|
|
*/
|
|
|
|
|
|
-test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
+test.describe('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
+ // 测试级别的时间戳,用于生成唯一数据
|
|
|
const TIMESTAMP = Date.now();
|
|
|
const UNIQUE_ID = `test_crud_${TIMESTAMP}`;
|
|
|
|
|
|
+ // 用于跟踪已创建的测试数据,便于清理
|
|
|
+ const createdTestData: Array<{ name: string }> = [];
|
|
|
+
|
|
|
// 测试数据生成函数
|
|
|
const generateTestPerson = (suffix: string) => ({
|
|
|
name: `${UNIQUE_ID}_${suffix}`,
|
|
|
@@ -38,25 +42,50 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
});
|
|
|
|
|
|
test.beforeEach(async ({ adminLoginPage, disabilityPersonPage }) => {
|
|
|
+ // 每次测试前重置数据存储
|
|
|
+ createdTestData.length = 0;
|
|
|
+
|
|
|
await adminLoginPage.goto();
|
|
|
await adminLoginPage.login(testUsers.admin.username, testUsers.admin.password);
|
|
|
await adminLoginPage.expectLoginSuccess();
|
|
|
await disabilityPersonPage.goto();
|
|
|
});
|
|
|
|
|
|
+ // 统一的测试后清理机制
|
|
|
+ test.afterEach(async ({ disabilityPersonPage, page }) => {
|
|
|
+ // 清理测试数据
|
|
|
+ for (const data of createdTestData) {
|
|
|
+ try {
|
|
|
+ await disabilityPersonPage.goto();
|
|
|
+ await disabilityPersonPage.searchByName(data.name);
|
|
|
+ const deleteButton = page.getByRole('button', { name: '删除' }).first();
|
|
|
+ if (await deleteButton.count() > 0) {
|
|
|
+ await deleteButton.click();
|
|
|
+ await page.getByRole('button', { name: '确认' }).click().catch(() => {});
|
|
|
+ await page.waitForTimeout(500);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.debug(` ⚠ 清理数据失败: ${data.name}`, error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 清空数组
|
|
|
+ createdTestData.length = 0;
|
|
|
+ });
|
|
|
+
|
|
|
test.describe('AC1: 新增残疾人完整流程', () => {
|
|
|
test('应该成功完成新增残疾人完整流程(基本信息 + 备注 + 银行卡)', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('full');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:新增残疾人完整流程(所有功能) ==========');
|
|
|
+ console.debug('\n========== 测试:新增残疾人完整流程(所有功能) ==========');
|
|
|
|
|
|
// 1. 打开新增对话框
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
- console.log('✓ 对话框已打开');
|
|
|
+ console.debug('✓ 对话框已打开');
|
|
|
|
|
|
// 2. 填写基本信息
|
|
|
await disabilityPersonPage.fillBasicForm(testData);
|
|
|
- console.log('✓ 基本信息已填写');
|
|
|
+ console.debug('✓ 基本信息已填写');
|
|
|
|
|
|
// 3. 添加银行卡(使用 Page Object 方法)
|
|
|
await disabilityPersonPage.scrollToSection('银行卡');
|
|
|
@@ -68,21 +97,21 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
cardType: '借记卡',
|
|
|
isDefault: true,
|
|
|
});
|
|
|
- console.log('✓ 银行卡已添加');
|
|
|
+ console.debug('✓ 银行卡已添加');
|
|
|
|
|
|
// 4. 添加备注
|
|
|
await disabilityPersonPage.scrollToSection('备注');
|
|
|
await disabilityPersonPage.addNote(`完整测试备注_${UNIQUE_ID}`);
|
|
|
- console.log('✓ 备注已添加');
|
|
|
+ console.debug('✓ 备注已添加');
|
|
|
|
|
|
// 5. 提交表单
|
|
|
const result = await disabilityPersonPage.submitForm();
|
|
|
|
|
|
// 6. 验证提交结果
|
|
|
- console.log('提交结果:', { hasSuccess: result.hasSuccess, hasError: result.hasError });
|
|
|
+ console.debug('提交结果:', { hasSuccess: result.hasSuccess, hasError: result.hasError });
|
|
|
|
|
|
if (result.hasError) {
|
|
|
- console.log('错误消息:', result.errorMessage);
|
|
|
+ console.debug('错误消息:', result.errorMessage);
|
|
|
}
|
|
|
|
|
|
// 7. 等待对话框关闭
|
|
|
@@ -99,38 +128,36 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 9. 验证记录创建成功
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
|
|
|
- console.log('========== 验证结果 ==========');
|
|
|
- console.log('数据创建成功:', personExists);
|
|
|
+ console.debug('========== 验证结果 ==========');
|
|
|
+ console.debug('数据创建成功:', personExists);
|
|
|
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ AC1 完整流程测试通过(基本信息 + 银行卡 + 备注)');
|
|
|
-
|
|
|
- // 清理测试数据
|
|
|
- await disabilityPersonPage.deleteDisabilityPerson(testData.name);
|
|
|
- console.log('✓ 测试数据已清理');
|
|
|
+ console.debug('✓ AC1 完整流程测试通过(基本信息 + 银行卡 + 备注)');
|
|
|
+ // 注意:数据清理由 test.afterEach 统一处理
|
|
|
});
|
|
|
|
|
|
test('应该成功完成新增残疾人完整流程(基本信息)', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('create');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:新增残疾人完整流程 ==========');
|
|
|
+ console.debug('\n========== 测试:新增残疾人完整流程 ==========');
|
|
|
|
|
|
// 1. 打开新增对话框
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
- console.log('✓ 对话框已打开');
|
|
|
+ console.debug('✓ 对话框已打开');
|
|
|
|
|
|
// 2. 填写基本信息
|
|
|
await disabilityPersonPage.fillBasicForm(testData);
|
|
|
- console.log('✓ 基本信息已填写');
|
|
|
+ console.debug('✓ 基本信息已填写');
|
|
|
|
|
|
// 3. 提交表单
|
|
|
const result = await disabilityPersonPage.submitForm();
|
|
|
|
|
|
// 4. 验证提交结果
|
|
|
- console.log('提交结果:', { hasSuccess: result.hasSuccess, hasError: result.hasError });
|
|
|
+ console.debug('提交结果:', { hasSuccess: result.hasSuccess, hasError: result.hasError });
|
|
|
|
|
|
if (result.hasError) {
|
|
|
- console.log('错误消息:', result.errorMessage);
|
|
|
+ console.debug('错误消息:', result.errorMessage);
|
|
|
}
|
|
|
|
|
|
// 5. 等待对话框关闭
|
|
|
@@ -147,16 +174,17 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 7. 验证记录创建成功
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
|
|
|
- console.log('========== 验证结果 ==========');
|
|
|
- console.log('数据创建成功:', personExists);
|
|
|
+ console.debug('========== 验证结果 ==========');
|
|
|
+ console.debug('数据创建成功:', personExists);
|
|
|
|
|
|
expect(personExists).toBe(true);
|
|
|
});
|
|
|
|
|
|
test('应该成功完成新增残疾人完整流程(含备注)', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('with_note');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:新增残疾人(含备注) ==========');
|
|
|
+ console.debug('\n========== 测试:新增残疾人(含备注) ==========');
|
|
|
|
|
|
// 1. 打开新增对话框
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -167,7 +195,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 3. 添加备注
|
|
|
await disabilityPersonPage.scrollToSection('备注');
|
|
|
await disabilityPersonPage.addNote(`测试备注_${UNIQUE_ID}`);
|
|
|
- console.log('✓ 备注已添加');
|
|
|
+ console.debug('✓ 备注已添加');
|
|
|
|
|
|
// 4. 提交表单
|
|
|
const result = await disabilityPersonPage.submitForm();
|
|
|
@@ -184,16 +212,17 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 含备注的残疾人创建成功');
|
|
|
+ console.debug('✓ 含备注的残疾人创建成功');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test.describe('AC2: 编辑残疾人信息', () => {
|
|
|
test('应该成功编辑残疾人基本信息', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('edit');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
const newName = `${UNIQUE_ID}_edited`;
|
|
|
|
|
|
- console.log('\n========== 测试:编辑残疾人信息 ==========');
|
|
|
+ console.debug('\n========== 测试:编辑残疾人信息 ==========');
|
|
|
|
|
|
// 1. 先创建一条记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -211,11 +240,11 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 验证记录存在
|
|
|
let personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 原始记录已创建');
|
|
|
+ console.debug('✓ 原始记录已创建');
|
|
|
|
|
|
// 2. 打开编辑对话框
|
|
|
await disabilityPersonPage.openEditDialog(testData.name);
|
|
|
- console.log('✓ 编辑对话框已打开');
|
|
|
+ console.debug('✓ 编辑对话框已打开');
|
|
|
|
|
|
// 3. 修改姓名(使用编辑表单)
|
|
|
const form = page.locator('form#update-form');
|
|
|
@@ -224,14 +253,14 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
const nameInput = form.getByLabel('姓名 *');
|
|
|
await nameInput.clear();
|
|
|
await nameInput.fill(newName);
|
|
|
- console.log('✓ 姓名已修改为:', newName);
|
|
|
+ console.debug('✓ 姓名已修改为:', newName);
|
|
|
|
|
|
// 4. 提交更新
|
|
|
const submitButton = page.getByRole('button', { name: '更新' });
|
|
|
await submitButton.click();
|
|
|
await page.waitForLoadState('networkidle', { timeout: 10000 });
|
|
|
await page.waitForTimeout(2000);
|
|
|
- console.log('✓ 更新已提交');
|
|
|
+ console.debug('✓ 更新已提交');
|
|
|
|
|
|
// 5. 验证更新后的记录
|
|
|
await disabilityPersonPage.goto();
|
|
|
@@ -240,13 +269,14 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
const updatedExists = await disabilityPersonPage.personExists(newName);
|
|
|
expect(updatedExists).toBe(true);
|
|
|
- console.log('✓ 编辑成功:新姓名显示在列表中');
|
|
|
+ console.debug('✓ 编辑成功:新姓名显示在列表中');
|
|
|
});
|
|
|
|
|
|
test('应该成功编辑并添加备注', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('edit_note');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:编辑并添加备注 ==========');
|
|
|
+ console.debug('\n========== 测试:编辑并添加备注 ==========');
|
|
|
|
|
|
// 1. 先创建一条记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -268,7 +298,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
await page.waitForTimeout(300);
|
|
|
await disabilityPersonPage.scrollToSection('备注');
|
|
|
await disabilityPersonPage.addNote(`编辑时添加的备注_${UNIQUE_ID}`);
|
|
|
- console.log('✓ 编辑时添加了备注');
|
|
|
+ console.debug('✓ 编辑时添加了备注');
|
|
|
|
|
|
// 4. 提交更新
|
|
|
const submitButton = page.getByRole('button', { name: '更新' });
|
|
|
@@ -279,15 +309,16 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 5. 验证更新成功
|
|
|
const stillExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(stillExists).toBe(true);
|
|
|
- console.log('✓ 编辑时添加备注成功');
|
|
|
+ console.debug('✓ 编辑时添加备注成功');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test.describe('AC3: 删除残疾人', () => {
|
|
|
test('应该成功删除残疾人记录', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('delete');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:删除残疾人记录 ==========');
|
|
|
+ console.debug('\n========== 测试:删除残疾人记录 ==========');
|
|
|
|
|
|
// 1. 先创建一条记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -301,7 +332,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 2. 获取初始列表数量
|
|
|
const initialCount = await disabilityPersonPage.getListCount();
|
|
|
- console.log('初始记录数:', initialCount);
|
|
|
+ console.debug('初始记录数:', initialCount);
|
|
|
|
|
|
// 搜索并验证记录存在
|
|
|
await disabilityPersonPage.searchByName(testData.name);
|
|
|
@@ -309,17 +340,17 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
let personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 记录已创建,准备删除');
|
|
|
+ console.debug('✓ 记录已创建,准备删除');
|
|
|
|
|
|
// 3. 删除记录
|
|
|
await disabilityPersonPage.deleteDisabilityPerson(testData.name);
|
|
|
- console.log('✓ 删除操作已执行');
|
|
|
+ console.debug('✓ 删除操作已执行');
|
|
|
|
|
|
// 4. 验证删除后列表数量减少
|
|
|
await disabilityPersonPage.goto();
|
|
|
await page.waitForLoadState('networkidle');
|
|
|
const finalCount = await disabilityPersonPage.getListCount();
|
|
|
- console.log('删除后记录数:', finalCount);
|
|
|
+ console.debug('删除后记录数:', finalCount);
|
|
|
|
|
|
expect(finalCount).toBeLessThanOrEqual(initialCount);
|
|
|
|
|
|
@@ -329,13 +360,14 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(false);
|
|
|
- console.log('✓ 记录已成功删除,不再显示在列表中');
|
|
|
+ console.debug('✓ 记录已成功删除,不再显示在列表中');
|
|
|
});
|
|
|
|
|
|
test('应该正确处理删除确认对话框', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('delete_confirm');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:删除确认对话框 ==========');
|
|
|
+ console.debug('\n========== 测试:删除确认对话框 ==========');
|
|
|
|
|
|
// 1. 创建记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -357,13 +389,13 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 3. 验证确认对话框出现
|
|
|
const confirmDialog = page.locator('[data-testid="delete-confirmation-dialog-title"]');
|
|
|
await expect(confirmDialog).toBeVisible({ timeout: 3000 });
|
|
|
- console.log('✓ 删除确认对话框已显示');
|
|
|
+ console.debug('✓ 删除确认对话框已显示');
|
|
|
|
|
|
// 4. 验证对话框内容
|
|
|
const dialogText = await page.locator('[role="dialog"]').textContent();
|
|
|
expect(dialogText).toContain('确定要删除');
|
|
|
expect(dialogText).toContain('此操作不可恢复');
|
|
|
- console.log('✓ 对话框文案正确');
|
|
|
+ console.debug('✓ 对话框文案正确');
|
|
|
|
|
|
// 5. 点击取消
|
|
|
const cancelButton = page.getByRole('button', { name: '取消' });
|
|
|
@@ -373,19 +405,20 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 6. 验证记录仍在列表中
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 取消删除后记录仍存在');
|
|
|
+ console.debug('✓ 取消删除后记录仍存在');
|
|
|
|
|
|
// 7. 实际删除以清理测试数据
|
|
|
await disabilityPersonPage.deleteDisabilityPerson(testData.name);
|
|
|
- console.log('✓ 测试数据已清理');
|
|
|
+ console.debug('✓ 测试数据已清理');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test.describe('AC4: 查看残疾人详情', () => {
|
|
|
test('应该正确显示残疾人详情', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('detail');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:查看残疾人详情 ==========');
|
|
|
+ console.debug('\n========== 测试:查看残疾人详情 ==========');
|
|
|
|
|
|
// 1. 创建一条记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -401,7 +434,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 2. 打开详情对话框
|
|
|
await disabilityPersonPage.openDetailDialog(testData.name);
|
|
|
- console.log('✓ 详情对话框已打开');
|
|
|
+ console.debug('✓ 详情对话框已打开');
|
|
|
|
|
|
// 3. 验证详情对话框显示基本信息
|
|
|
const dialog = page.locator('[role="dialog"]').filter({ hasText: '残疾人详情' });
|
|
|
@@ -415,23 +448,24 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
expect(dialogText).toContain(testData.disabilityLevel);
|
|
|
expect(dialogText).toContain(testData.phone);
|
|
|
|
|
|
- console.log('✓ 基本信息显示正确');
|
|
|
- console.log(' - 姓名:', testData.name);
|
|
|
- console.log(' - 身份证号:', testData.idCard);
|
|
|
- console.log(' - 残疾类型:', testData.disabilityType);
|
|
|
- console.log(' - 残疾等级:', testData.disabilityLevel);
|
|
|
+ console.debug('✓ 基本信息显示正确');
|
|
|
+ console.debug(' - 姓名:', testData.name);
|
|
|
+ console.debug(' - 身份证号:', testData.idCard);
|
|
|
+ console.debug(' - 残疾类型:', testData.disabilityType);
|
|
|
+ console.debug(' - 残疾等级:', testData.disabilityLevel);
|
|
|
|
|
|
// 4. 关闭详情对话框
|
|
|
const closeButton = page.getByRole('button', { name: '关闭' });
|
|
|
await closeButton.click();
|
|
|
await disabilityPersonPage.waitForDetailDialogClosed();
|
|
|
- console.log('✓ 详情对话框已关闭');
|
|
|
+ console.debug('✓ 详情对话框已关闭');
|
|
|
});
|
|
|
|
|
|
test('应该能在详情中查看完整信息', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('full_detail');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:查看完整详情信息 ==========');
|
|
|
+ console.debug('\n========== 测试:查看完整详情信息 ==========');
|
|
|
|
|
|
// 1. 创建带备注的记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -461,7 +495,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
expect(dialogText).toContain('残疾证号');
|
|
|
expect(dialogText).toContain('联系电话');
|
|
|
|
|
|
- console.log('✓ 详情对话框显示所有基本字段');
|
|
|
+ console.debug('✓ 详情对话框显示所有基本字段');
|
|
|
|
|
|
// 4. 关闭对话框
|
|
|
await page.getByRole('button', { name: '关闭' }).click();
|
|
|
@@ -472,8 +506,9 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
test.describe('AC5: 列表查询与筛选', () => {
|
|
|
test('应该支持按姓名搜索残疾人', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('search');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:按姓名搜索 ==========');
|
|
|
+ console.debug('\n========== 测试:按姓名搜索 ==========');
|
|
|
|
|
|
// 1. 创建记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -487,7 +522,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 2. 获取搜索前的列表数量
|
|
|
const countBeforeSearch = await disabilityPersonPage.getListCount();
|
|
|
- console.log('搜索前记录数:', countBeforeSearch);
|
|
|
+ console.debug('搜索前记录数:', countBeforeSearch);
|
|
|
|
|
|
// 3. 执行搜索
|
|
|
await disabilityPersonPage.searchByName(testData.name);
|
|
|
@@ -496,19 +531,20 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 4. 验证搜索结果
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 搜索成功:找到目标记录');
|
|
|
+ console.debug('✓ 搜索成功:找到目标记录');
|
|
|
|
|
|
// 5. 验证搜索结果中只有目标记录
|
|
|
const searchResults = await disabilityPersonPage.getListData();
|
|
|
const matchingResults = searchResults.filter(r => r.name.includes(testData.name));
|
|
|
expect(matchingResults.length).toBeGreaterThan(0);
|
|
|
- console.log(`✓ 搜索结果数量: ${matchingResults.length}`);
|
|
|
+ console.debug(`✓ 搜索结果数量: ${matchingResults.length}`);
|
|
|
});
|
|
|
|
|
|
test('应该支持按残疾类型筛选', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('filter');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:按残疾类型筛选 ==========');
|
|
|
+ console.debug('\n========== 测试:按残疾类型筛选 ==========');
|
|
|
|
|
|
// 1. 创建记录(使用肢体残疾)
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -527,7 +563,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
await disabilityPersonPage.resetFilters();
|
|
|
await page.waitForTimeout(1000);
|
|
|
const countBeforeFilter = await disabilityPersonPage.getListCount();
|
|
|
- console.log('筛选前记录数:', countBeforeFilter);
|
|
|
+ console.debug('筛选前记录数:', countBeforeFilter);
|
|
|
|
|
|
// 3. 应用筛选(肢体残疾)
|
|
|
await disabilityPersonPage.filterByDisabilityType('肢体残疾');
|
|
|
@@ -535,30 +571,30 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 4. 验证筛选结果
|
|
|
const listData = await disabilityPersonPage.getListCount();
|
|
|
- console.log('筛选后记录数:', listData);
|
|
|
+ console.debug('筛选后记录数:', listData);
|
|
|
|
|
|
// 验证结果中包含我们创建的记录
|
|
|
const personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ 筛选成功:找到目标记录');
|
|
|
+ console.debug('✓ 筛选成功:找到目标记录');
|
|
|
|
|
|
// 5. 重置筛选
|
|
|
await disabilityPersonPage.resetFilters();
|
|
|
await page.waitForTimeout(1000);
|
|
|
|
|
|
const countAfterReset = await disabilityPersonPage.getListCount();
|
|
|
- console.log('重置后记录数:', countAfterReset);
|
|
|
+ console.debug('重置后记录数:', countAfterReset);
|
|
|
});
|
|
|
|
|
|
test('应该支持重置筛选条件', async ({ disabilityPersonPage, page }) => {
|
|
|
- console.log('\n========== 测试:重置筛选条件 ==========');
|
|
|
+ console.debug('\n========== 测试:重置筛选条件 ==========');
|
|
|
|
|
|
// 1. 应用筛选
|
|
|
await disabilityPersonPage.filterByDisabilityType('肢体残疾');
|
|
|
await page.waitForTimeout(1000);
|
|
|
|
|
|
const countAfterFilter = await disabilityPersonPage.getListCount();
|
|
|
- console.log('应用筛选后记录数:', countAfterFilter);
|
|
|
+ console.debug('应用筛选后记录数:', countAfterFilter);
|
|
|
|
|
|
// 2. 重置筛选
|
|
|
await disabilityPersonPage.resetFilters();
|
|
|
@@ -566,17 +602,18 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 3. 验证重置后显示所有记录
|
|
|
const countAfterReset = await disabilityPersonPage.getListCount();
|
|
|
- console.log('重置后记录数:', countAfterReset);
|
|
|
+ console.debug('重置后记录数:', countAfterReset);
|
|
|
|
|
|
// 重置后数量应该恢复(或至少不减少)
|
|
|
expect(countAfterReset).toBeGreaterThanOrEqual(countAfterFilter);
|
|
|
- console.log('✓ 重置筛选成功');
|
|
|
+ console.debug('✓ 重置筛选成功');
|
|
|
});
|
|
|
|
|
|
test('应该正确获取列表数据', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('list_data');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
- console.log('\n========== 测试:获取列表数据 ==========');
|
|
|
+ console.debug('\n========== 测试:获取列表数据 ==========');
|
|
|
|
|
|
// 1. 创建记录
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
@@ -591,13 +628,13 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
// 2. 获取列表数据
|
|
|
const listData = await disabilityPersonPage.getListData();
|
|
|
|
|
|
- console.log('列表记录数:', listData.length);
|
|
|
+ console.debug('列表记录数:', listData.length);
|
|
|
|
|
|
if (listData.length > 0) {
|
|
|
- console.log('第一条记录:');
|
|
|
- console.log(' - 姓名:', listData[0].name);
|
|
|
- console.log(' - 残疾类型:', listData[0].disabilityType);
|
|
|
- console.log(' - 残疾等级:', listData[0].disabilityLevel);
|
|
|
+ console.debug('第一条记录:');
|
|
|
+ console.debug(' - 姓名:', listData[0].name);
|
|
|
+ console.debug(' - 残疾类型:', listData[0].disabilityType);
|
|
|
+ console.debug(' - 残疾等级:', listData[0].disabilityLevel);
|
|
|
}
|
|
|
|
|
|
// 3. 验证数据结构
|
|
|
@@ -610,43 +647,43 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
expect(listData[0]).toHaveProperty('phone');
|
|
|
}
|
|
|
|
|
|
- console.log('✓ 列表数据结构正确');
|
|
|
+ console.debug('✓ 列表数据结构正确');
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test.describe('AC6: 数据导出', () => {
|
|
|
test('应该支持数据导出功能', async ({ disabilityPersonPage, page }) => {
|
|
|
- console.log('\n========== 测试:数据导出功能 ==========');
|
|
|
+ console.debug('\n========== 测试:数据导出功能 ==========');
|
|
|
|
|
|
// 1. 检查是否存在导出按钮
|
|
|
const exportButton = page.getByRole('button', { name: /导出|下载|Export/i });
|
|
|
const exportExists = await exportButton.count() > 0;
|
|
|
|
|
|
if (!exportExists) {
|
|
|
- console.log('ℹ️ 导出按钮不存在,功能可能未实现');
|
|
|
+ console.debug('ℹ️ 导出按钮不存在,功能可能未实现');
|
|
|
// 跳过测试而非失败
|
|
|
test.skip();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- console.log('✓ 找到导出按钮');
|
|
|
+ console.debug('✓ 找到导出按钮');
|
|
|
|
|
|
// 2. 使用 Page Object 的 exportData 方法执行导出
|
|
|
const result = await disabilityPersonPage.exportData();
|
|
|
|
|
|
// 3. 验证导出结果
|
|
|
if (result.success) {
|
|
|
- console.log(`✓ 导出成功: ${result.fileName || '文件已下载'}`);
|
|
|
+ console.debug(`✓ 导出成功: ${result.fileName || '文件已下载'}`);
|
|
|
expect(result.success).toBe(true);
|
|
|
} else {
|
|
|
- console.log('⚠️ 导出失败或未触发下载');
|
|
|
+ console.debug('⚠️ 导出失败或未触发下载');
|
|
|
// 如果导出功能存在但未工作,这是需要关注的问题
|
|
|
expect(result.success).toBe(true);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
test('应该验证导出文件包含正确数据', async ({ disabilityPersonPage, page }) => {
|
|
|
- console.log('\n========== 测试:导出数据正确性 ==========');
|
|
|
+ console.debug('\n========== 测试:导出数据正确性 ==========');
|
|
|
|
|
|
// 检查导出按钮是否存在
|
|
|
const exportButton = page.getByRole('button', { name: /导出|下载|Export/i });
|
|
|
@@ -659,6 +696,7 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 1. 创建一条测试记录以便验证导出数据
|
|
|
const testData = generateTestPerson('export_verify');
|
|
|
+ createdTestData.push({ name: testData.name });
|
|
|
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
await disabilityPersonPage.fillBasicForm(testData);
|
|
|
@@ -674,23 +712,22 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
// 3. 验证导出成功
|
|
|
expect(result.success).toBe(true);
|
|
|
- console.log(`✓ 导出成功: ${result.fileName || '文件已下载'}`);
|
|
|
-
|
|
|
- // 4. 清理测试数据
|
|
|
- await disabilityPersonPage.deleteDisabilityPerson(testData.name);
|
|
|
- console.log('✓ 测试数据已清理');
|
|
|
+ console.debug(`✓ 导出成功: ${result.fileName || '文件已下载'}`);
|
|
|
+ // 注意:数据清理由 test.afterEach 统一处理
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test.describe('综合测试:完整 CRUD 流程', () => {
|
|
|
test('应该完成完整的 CRUD 生命周期', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateTestPerson('lifecycle');
|
|
|
+ // 生命周期测试会在测试内部删除数据,不需要 afterEach 清理
|
|
|
+ // 但如果测试失败,afterEach 会尝试清理(此时已不存在,会安全跳过)
|
|
|
const updatedName = `${UNIQUE_ID}_lifecycle_updated`;
|
|
|
|
|
|
- console.log('\n========== 测试:完整 CRUD 生命周期 ==========');
|
|
|
+ console.debug('\n========== 测试:完整 CRUD 生命周期 ==========');
|
|
|
|
|
|
// CREATE: 创建记录
|
|
|
- console.log('\n[CREATE] 创建残疾人记录...');
|
|
|
+ console.debug('\n[CREATE] 创建残疾人记录...');
|
|
|
await disabilityPersonPage.openCreateDialog();
|
|
|
await disabilityPersonPage.fillBasicForm(testData);
|
|
|
await disabilityPersonPage.submitForm();
|
|
|
@@ -703,10 +740,10 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
let personExists = await disabilityPersonPage.personExists(testData.name);
|
|
|
expect(personExists).toBe(true);
|
|
|
- console.log('✓ CREATE 成功');
|
|
|
+ console.debug('✓ CREATE 成功');
|
|
|
|
|
|
// READ: 查看详情
|
|
|
- console.log('\n[READ] 查看残疾人详情...');
|
|
|
+ console.debug('\n[READ] 查看残疾人详情...');
|
|
|
await disabilityPersonPage.openDetailDialog(testData.name);
|
|
|
const dialog = page.locator('[role="dialog"]').filter({ hasText: '残疾人详情' });
|
|
|
await expect(dialog).toBeVisible();
|
|
|
@@ -714,10 +751,10 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
expect(dialogText).toContain(testData.name);
|
|
|
await page.getByRole('button', { name: '关闭' }).click();
|
|
|
await disabilityPersonPage.waitForDetailDialogClosed();
|
|
|
- console.log('✓ READ 成功');
|
|
|
+ console.debug('✓ READ 成功');
|
|
|
|
|
|
// UPDATE: 更新记录
|
|
|
- console.log('\n[UPDATE] 更新残疾人记录...');
|
|
|
+ console.debug('\n[UPDATE] 更新残疾人记录...');
|
|
|
await disabilityPersonPage.openEditDialog(testData.name);
|
|
|
const form = page.locator('form#update-form');
|
|
|
await form.waitFor({ state: 'visible', timeout: 5000 });
|
|
|
@@ -737,18 +774,18 @@ test.describe.serial('残疾人管理 - 完整 CRUD 流程测试', () => {
|
|
|
|
|
|
const updatedExists = await disabilityPersonPage.personExists(updatedName);
|
|
|
expect(updatedExists).toBe(true);
|
|
|
- console.log('✓ UPDATE 成功');
|
|
|
+ console.debug('✓ UPDATE 成功');
|
|
|
|
|
|
// DELETE: 删除记录
|
|
|
- console.log('\n[DELETE] 删除残疾人记录...');
|
|
|
+ console.debug('\n[DELETE] 删除残疾人记录...');
|
|
|
await disabilityPersonPage.deleteDisabilityPerson(updatedName);
|
|
|
await page.waitForTimeout(1000);
|
|
|
|
|
|
const deletedExists = await disabilityPersonPage.personExists(updatedName);
|
|
|
expect(deletedExists).toBe(false);
|
|
|
- console.log('✓ DELETE 成功');
|
|
|
+ console.debug('✓ DELETE 成功');
|
|
|
|
|
|
- console.log('\n========== 完整 CRUD 生命周期测试完成 ==========');
|
|
|
+ console.debug('\n========== 完整 CRUD 生命周期测试完成 ==========');
|
|
|
});
|
|
|
});
|
|
|
});
|