| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- import { TIMEOUTS } from '../../utils/timeouts';
- import { test, expect } from '../../utils/test-setup';
- import { readFileSync } from 'fs';
- import { join, dirname } from 'path';
- import { fileURLToPath } from 'url';
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = dirname(__filename);
- const testUsers = JSON.parse(readFileSync(join(__dirname, '../../fixtures/test-users.json'), 'utf-8'));
- test.describe.serial('残疾人管理 - 完整功能测试', () => {
- test.beforeEach(async ({ adminLoginPage, disabilityPersonPage }) => {
- // 以管理员身份登录后台
- await adminLoginPage.goto();
- await adminLoginPage.login(testUsers.admin.username, testUsers.admin.password);
- await adminLoginPage.expectLoginSuccess();
- await disabilityPersonPage.goto();
- });
- test('完整流程:新增残疾人(包含照片、银行卡、备注、回访)', async ({ disabilityPersonPage, page }) => {
- // 生成唯一的测试数据
- const timestamp = Date.now();
- const testData = {
- name: `完整测试_${timestamp}`,
- gender: '男',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '视力残疾',
- disabilityLevel: '一级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道1号',
- province: '湖北省',
- city: '武汉市',
- // 照片数据
- photos: [
- { type: '身份证照片', fileName: 'id-card-front.jpg' },
- { type: '身份证照片', fileName: 'id-card-back.jpg' },
- { type: '残疾证照片', fileName: 'disability-cert.jpg' },
- { type: '个人照片', fileName: 'personal-photo.jpg' }
- ],
- // 银行卡数据
- bankCards: [
- {
- bankName: '中国工商银行',
- subBankName: '武汉分行',
- cardNumber: '6217000012345678901',
- cardholderName: testData => testData.name,
- cardType: '一类卡',
- photoFileName: 'bank-card-1.jpg'
- }
- ],
- // 备注数据
- remarks: [
- {
- content: '该残疾人行动不便,需要轮椅辅助',
- isSpecialNeeds: true
- },
- {
- content: '家有年迈父母需要照顾',
- isSpecialNeeds: false
- }
- ],
- // 回访数据
- visits: [
- {
- visitDate: '2026-01-01',
- visitType: '电话回访',
- visitContent: '了解近期生活状况',
- visitResult: '情况稳定,暂无特殊需求',
- nextVisitDate: '2026-02-01'
- }
- ]
- };
- console.log('\n========== 开始完整功能测试 ==========');
- console.log('测试数据:', JSON.stringify(testData, null, 2));
- // 1. 打开创建对话框
- console.log('\n[步骤1] 打开新增残疾人对话框...');
- await disabilityPersonPage.openCreateDialog();
- console.log('✓ 对话框已打开');
- // 2. 填写基本信息
- console.log('\n[步骤2] 填写基本信息...');
- await disabilityPersonPage.fillBasicForm({
- name: testData.name,
- gender: testData.gender,
- idCard: testData.idCard,
- disabilityId: testData.disabilityId,
- disabilityType: testData.disabilityType,
- disabilityLevel: testData.disabilityLevel,
- phone: testData.phone,
- idAddress: testData.idAddress,
- province: testData.province,
- city: testData.city
- });
- console.log('✓ 基本信息已填写');
- // 3. 上传照片
- console.log('\n[步骤3] 上传照片...');
- await disabilityPersonPage.scrollToSection('照片');
- for (const photo of testData.photos) {
- try {
- await disabilityPersonPage.uploadPhoto(photo.type, photo.fileName);
- } catch (error) {
- console.log(` ⚠️ 照片上传失败(可能需要真实文件): ${photo.type}`);
- // 继续测试,不阻断
- }
- }
- // 4. 添加银行卡
- console.log('\n[步骤4] 添加银行卡...');
- await disabilityPersonPage.scrollToSection('银行卡');
- for (const bankCard of testData.bankCards) {
- try {
- await disabilityPersonPage.addBankCard({
- ...bankCard,
- cardholderName: testData.name
- });
- } catch (error) {
- console.log(` ⚠️ 银行卡添加失败: ${error}`);
- // 继续测试,不阻断
- }
- }
- // 5. 添加备注
- console.log('\n[步骤5] 添加备注...');
- await disabilityPersonPage.scrollToSection('备注');
- for (const remark of testData.remarks) {
- try {
- await disabilityPersonPage.addRemark(remark);
- } catch (error) {
- console.log(` ⚠️ 备注添加失败: ${error}`);
- // 继续测试,不阻断
- }
- }
- // 6. 添加回访记录
- console.log('\n[步骤6] 添加回访记录...');
- await disabilityPersonPage.scrollToSection('回访');
- for (const visit of testData.visits) {
- try {
- await disabilityPersonPage.addVisit(visit);
- } catch (error) {
- console.log(` ⚠️ 回访记录添加失败: ${error}`);
- // 继续测试,不阻断
- }
- }
- // 7. 提交表单
- console.log('\n[步骤7] 提交表单...');
- const result = await disabilityPersonPage.submitForm();
- console.log('\n========== 测试结果分析 ==========');
- console.log('有错误提示:', result.hasError);
- console.log('有成功提示:', result.hasSuccess);
- if (result.hasError) {
- console.log('❌ 错误消息:', result.errorMessage);
- }
- if (result.hasSuccess) {
- console.log('✅ 成功消息:', result.successMessage);
- }
- // 8. 验证数据是否创建成功
- console.log('\n[步骤8] 验证数据创建情况...');
- await disabilityPersonPage.waitForDialogClosed();
- // 刷新页面
- await page.reload();
- await page.waitForLoadState('networkidle');
- await disabilityPersonPage.goto();
- // 搜索刚创建的残疾人
- await disabilityPersonPage.searchByName(testData.name);
- await page.waitForTimeout(TIMEOUTS.LONG);
- const personExists = await disabilityPersonPage.personExists(testData.name);
- console.log('\n========== 最终结论 ==========');
- console.log('数据创建成功:', personExists);
- if (personExists) {
- console.log('✅ 测试通过:残疾人创建成功');
- } else {
- console.log('❌ 测试失败:未找到创建的残疾人');
- }
- // 如果失败,保存错误截图
- if (!personExists) {
- await page.screenshot({
- path: `test-results/disability-person-complete-failure-${timestamp}.png`,
- fullPage: true
- });
- console.log('📸 已保存失败截图');
- }
- expect(personExists).toBe(true);
- });
- test('照片上传功能测试', async ({ disabilityPersonPage, page }) => {
- const timestamp = Date.now();
- const testData = {
- name: `照片测试_${timestamp}`,
- gender: '女',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '听力残疾',
- disabilityLevel: '二级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道2号',
- province: '湖北省',
- city: '武汉市'
- };
- console.log('\n========== 照片上传功能测试 ==========');
- // 打开对话框并填写基本信息
- await disabilityPersonPage.openCreateDialog();
- await disabilityPersonPage.fillBasicForm(testData);
- // 滚动到照片区域
- await disabilityPersonPage.scrollToSection('照片');
- // 验证照片上传组件是否存在
- const photoUploadSection = page.locator('text=照片管理').or(page.locator('text=上传照片'));
- await expect(photoUploadSection.first()).toBeVisible({ timeout: TIMEOUTS.DIALOG });
- console.log('✓ 照片上传区域可见');
- // 验证照片类型选项
- const photoTypes = ['身份证照片', '残疾证照片', '个人照片', '其他照片'];
- for (const photoType of photoTypes) {
- const photoTypeLabel = page.locator(`text=${photoType}`);
- const isVisible = await photoTypeLabel.count() > 0;
- if (isVisible) {
- console.log(` ✓ 找到照片类型: ${photoType}`);
- }
- }
- // 取消对话框
- await disabilityPersonPage.cancelDialog();
- console.log('✓ 测试完成:照片上传组件正常');
- });
- test('银行卡管理功能测试', async ({ disabilityPersonPage, page }) => {
- const timestamp = Date.now();
- const testData = {
- name: `银行卡测试_${timestamp}`,
- gender: '男',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '肢体残疾',
- disabilityLevel: '三级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道3号',
- province: '湖北省',
- city: '武汉市'
- };
- console.log('\n========== 银行卡管理功能测试 ==========');
- // 打开对话框并填写基本信息
- await disabilityPersonPage.openCreateDialog();
- await disabilityPersonPage.fillBasicForm(testData);
- // 滚动到银行卡区域
- await disabilityPersonPage.scrollToSection('银行卡');
- // 验证银行卡管理组件是否存在
- const bankCardSection = page.locator('text=银行卡').or(page.locator('text=银行卡管理'));
- await expect(bankCardSection.first()).toBeVisible({ timeout: TIMEOUTS.DIALOG });
- console.log('✓ 银行卡管理区域可见');
- // 查找添加银行卡按钮
- const addCardButton = page.getByRole('button', { name: /添加银行卡/ }).or(page.getByRole('button', { name: /\+/ }));
- const buttonExists = await addCardButton.count() > 0;
- if (buttonExists) {
- console.log(' ✓ 找到添加银行卡按钮');
- } else {
- console.log(' ⚠️ 未找到添加银行卡按钮(可能是UI差异)');
- }
- // 取消对话框
- await disabilityPersonPage.cancelDialog();
- console.log('✓ 测试完成:银行卡管理组件正常');
- });
- test('备注功能测试', async ({ disabilityPersonPage, page }) => {
- const timestamp = Date.now();
- const testData = {
- name: `备注测试_${timestamp}`,
- gender: '女',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '言语残疾',
- disabilityLevel: '四级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道4号',
- province: '湖北省',
- city: '武汉市'
- };
- console.log('\n========== 备注功能测试 ==========');
- // 打开对话框并填写基本信息
- await disabilityPersonPage.openCreateDialog();
- await disabilityPersonPage.fillBasicForm(testData);
- // 滚动到备注区域
- await disabilityPersonPage.scrollToSection('备注');
- // 验证备注管理组件是否存在
- const remarkSection = page.locator('text=备注').or(page.locator('text=备注管理'));
- await expect(remarkSection.first()).toBeVisible({ timeout: TIMEOUTS.DIALOG });
- console.log('✓ 备注管理区域可见');
- // 查找添加备注按钮
- const addRemarkButton = page.getByRole('button', { name: /添加备注/ }).or(page.getByRole('button', { name: /\+/ }));
- const buttonExists = await addRemarkButton.count() > 0;
- if (buttonExists) {
- console.log(' ✓ 找到添加备注按钮');
- }
- // 查找特殊需求选项
- const specialNeedsCheckbox = page.getByRole('checkbox', { name: /特殊需求/ });
- const checkboxExists = await specialNeedsCheckbox.count() > 0;
- if (checkboxExists) {
- console.log(' ✓ 找到特殊需求复选框');
- }
- // 取消对话框
- await disabilityPersonPage.cancelDialog();
- console.log('✓ 测试完成:备注管理组件正常');
- });
- test('回访功能测试', async ({ disabilityPersonPage, page }) => {
- const timestamp = Date.now();
- const testData = {
- name: `回访测试_${timestamp}`,
- gender: '男',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '智力残疾',
- disabilityLevel: '一级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道5号',
- province: '湖北省',
- city: '武汉市'
- };
- console.log('\n========== 回访功能测试 ==========');
- // 打开对话框并填写基本信息
- await disabilityPersonPage.openCreateDialog();
- await disabilityPersonPage.fillBasicForm(testData);
- // 滚动到回访区域
- await disabilityPersonPage.scrollToSection('回访');
- // 验证回访管理组件是否存在
- const visitSection = page.locator('text=回访').or(page.locator('text=回访管理'));
- await expect(visitSection.first()).toBeVisible({ timeout: TIMEOUTS.DIALOG });
- console.log('✓ 回访管理区域可见');
- // 查找添加回访按钮
- const addVisitButton = page.getByRole('button', { name: /添加回访/ }).or(page.getByRole('button', { name: /\+/ }));
- const buttonExists = await addVisitButton.count() > 0;
- if (buttonExists) {
- console.log(' ✓ 找到添加回访按钮');
- }
- // 取消对话框
- await disabilityPersonPage.cancelDialog();
- console.log('✓ 测试完成:回访管理组件正常');
- });
- test('边界测试:不填写可选字段,只填写必填项', async ({ disabilityPersonPage, page }) => {
- const timestamp = Date.now();
- const testData = {
- name: `必填项测试_${timestamp}`,
- gender: '男',
- idCard: `42010119900101123${timestamp % 10}`,
- disabilityId: `5110011990010${timestamp % 10}`,
- disabilityType: '视力残疾',
- disabilityLevel: '二级',
- phone: `1380013800${timestamp % 10}`,
- idAddress: '湖北省武汉市测试街道6号',
- province: '湖北省',
- city: '武汉市'
- };
- console.log('\n========== 必填项边界测试 ==========');
- // 只填写必填项
- await disabilityPersonPage.openCreateDialog();
- await disabilityPersonPage.fillBasicForm(testData);
- // 直接提交,不填写照片、银行卡、备注、回访
- const result = await disabilityPersonPage.submitForm();
- console.log('测试结果:', result.hasSuccess ? '✅ 成功' : '❌ 失败');
- if (result.hasError) {
- console.log('错误消息:', result.errorMessage);
- }
- // 验证是否创建成功
- await disabilityPersonPage.waitForDialogClosed();
- await page.reload();
- await page.waitForLoadState('networkidle');
- await disabilityPersonPage.goto();
- await disabilityPersonPage.searchByName(testData.name);
- const personExists = await disabilityPersonPage.personExists(testData.name);
- console.log('数据创建成功:', personExists);
- expect(personExists).toBe(true);
- });
- });
|