|
|
@@ -2,7 +2,6 @@ import { test, expect } from '../../utils/test-setup';
|
|
|
import { readFileSync } from 'fs';
|
|
|
import { join, dirname } from 'path';
|
|
|
import { fileURLToPath } from 'url';
|
|
|
-import { selectRadixOption } from '@d8d/e2e-test-utils';
|
|
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
|
const __dirname = dirname(__filename);
|
|
|
@@ -20,10 +19,10 @@ const TIMEOUTS = {
|
|
|
const createdTestData: Array<{ name: string; idCard: string }> = [];
|
|
|
|
|
|
/**
|
|
|
- * 生成唯一的测试数据
|
|
|
+ * 生成唯一的测试数据(使用更大范围的随机值提高唯一性)
|
|
|
*/
|
|
|
function generateUniqueTestData(suffix: string) {
|
|
|
- const randomPart = Math.floor(Math.random() * 1000000);
|
|
|
+ const randomPart = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
|
|
|
const timestamp = Date.now();
|
|
|
return {
|
|
|
name: `银行卡${suffix}_${timestamp}_${randomPart}`,
|
|
|
@@ -67,188 +66,6 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
createdTestData.length = 0;
|
|
|
});
|
|
|
|
|
|
- /**
|
|
|
- * 辅助函数:在银行卡区域添加银行卡
|
|
|
- */
|
|
|
- async function addBankCardInline(page: any, bankCard: {
|
|
|
- bankName: string;
|
|
|
- subBankName: string;
|
|
|
- cardNumber: string;
|
|
|
- cardholderName: string;
|
|
|
- cardType?: string;
|
|
|
- isDefault?: boolean;
|
|
|
- }) {
|
|
|
- console.debug(` 添加银行卡: ${bankCard.bankName} - ${bankCard.cardNumber}`);
|
|
|
-
|
|
|
- // 滚动到银行卡管理区域
|
|
|
- const bankCardLabel = page.getByText('银行卡管理');
|
|
|
- await bankCardLabel.scrollIntoViewIfNeeded();
|
|
|
- await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
-
|
|
|
- // 获取当前银行卡数量
|
|
|
- const currentCardCount = await page.locator('[data-testid^="remove-bank-card-"]').count();
|
|
|
- console.debug(` 当前银行卡数量: ${currentCardCount}`);
|
|
|
-
|
|
|
- // 点击"添加银行卡"按钮
|
|
|
- const addButton = page.locator('[data-testid="add-bank-card-button"]');
|
|
|
- await addButton.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
-
|
|
|
- // 等待新的银行卡卡片出现
|
|
|
- const newCardCount = await page.locator('[data-testid^="remove-bank-card-"]').count();
|
|
|
- console.debug(` 添加后银行卡数量: ${newCardCount}`);
|
|
|
- expect(newCardCount).toBe(currentCardCount + 1);
|
|
|
-
|
|
|
- // 新添加的银行卡索引
|
|
|
- const cardIndex = currentCardCount;
|
|
|
-
|
|
|
- // 填写银行卡信息
|
|
|
- // 1. 选择银行名称
|
|
|
- const bankSelectTrigger = page.locator(`[data-testid="bank-select-${cardIndex}"]`);
|
|
|
- await bankSelectTrigger.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
- await page.getByRole('option', { name: bankCard.bankName }).click();
|
|
|
- console.debug(` ✓ 银行名称: ${bankCard.bankName}`);
|
|
|
-
|
|
|
- // 2. 填写发卡支行
|
|
|
- const subBankInput = page.locator(`[data-testid="sub-bank-name-input-${cardIndex}"]`);
|
|
|
- await subBankInput.fill(bankCard.subBankName);
|
|
|
- console.debug(` ✓ 发卡支行: ${bankCard.subBankName}`);
|
|
|
-
|
|
|
- // 3. 填写银行卡号
|
|
|
- const cardNumberInput = page.locator(`[data-testid="card-number-input-${cardIndex}"]`);
|
|
|
- await cardNumberInput.fill(bankCard.cardNumber);
|
|
|
- console.debug(` ✓ 银行卡号: ${bankCard.cardNumber}`);
|
|
|
-
|
|
|
- // 4. 填写持卡人姓名
|
|
|
- const cardholderInput = page.locator(`[data-testid="cardholder-name-input-${cardIndex}"]`);
|
|
|
- await cardholderInput.fill(bankCard.cardholderName);
|
|
|
- console.debug(` ✓ 持卡人姓名: ${bankCard.cardholderName}`);
|
|
|
-
|
|
|
- // 5. 选择银行卡类型(可选)
|
|
|
- if (bankCard.cardType) {
|
|
|
- const cardTypeTrigger = page.locator(`[data-testid="card-type-select-${cardIndex}"]`);
|
|
|
- await cardTypeTrigger.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
- await page.getByRole('option', { name: bankCard.cardType }).click();
|
|
|
- console.debug(` ✓ 银行卡类型: ${bankCard.cardType}`);
|
|
|
- }
|
|
|
-
|
|
|
- // 6. 设置默认银行卡(可选)
|
|
|
- if (bankCard.isDefault) {
|
|
|
- const defaultSwitch = page.locator(`[data-testid="default-card-switch-${cardIndex}"]`);
|
|
|
- await defaultSwitch.click();
|
|
|
- console.debug(` ✓ 设为默认银行卡`);
|
|
|
- }
|
|
|
-
|
|
|
- console.debug(` ✓ 银行卡 ${cardIndex} 添加完成`);
|
|
|
- return cardIndex;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 辅助函数:编辑指定索引的银行卡
|
|
|
- */
|
|
|
- async function editBankCard(page: any, cardIndex: number, updatedData: {
|
|
|
- bankName?: string;
|
|
|
- subBankName?: string;
|
|
|
- cardNumber?: string;
|
|
|
- cardholderName?: string;
|
|
|
- cardType?: string;
|
|
|
- }) {
|
|
|
- console.debug(` 编辑银行卡 ${cardIndex}`);
|
|
|
-
|
|
|
- // 编辑银行名称
|
|
|
- if (updatedData.bankName !== undefined) {
|
|
|
- const bankSelectTrigger = page.locator(`[data-testid="bank-select-${cardIndex}"]`);
|
|
|
- await bankSelectTrigger.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
- await page.getByRole('option', { name: updatedData.bankName }).click();
|
|
|
- console.debug(` ✓ 更新银行名称: ${updatedData.bankName}`);
|
|
|
- }
|
|
|
-
|
|
|
- // 编辑发卡支行
|
|
|
- if (updatedData.subBankName !== undefined) {
|
|
|
- const subBankInput = page.locator(`[data-testid="sub-bank-name-input-${cardIndex}"]`);
|
|
|
- await subBankInput.clear();
|
|
|
- await subBankInput.fill(updatedData.subBankName);
|
|
|
- console.debug(` ✓ 更新发卡支行: ${updatedData.subBankName}`);
|
|
|
- }
|
|
|
-
|
|
|
- // 编辑银行卡号
|
|
|
- if (updatedData.cardNumber !== undefined) {
|
|
|
- const cardNumberInput = page.locator(`[data-testid="card-number-input-${cardIndex}"]`);
|
|
|
- await cardNumberInput.clear();
|
|
|
- await cardNumberInput.fill(updatedData.cardNumber);
|
|
|
- console.debug(` ✓ 更新银行卡号: ${updatedData.cardNumber}`);
|
|
|
- }
|
|
|
-
|
|
|
- // 编辑持卡人姓名
|
|
|
- if (updatedData.cardholderName !== undefined) {
|
|
|
- const cardholderInput = page.locator(`[data-testid="cardholder-name-input-${cardIndex}"]`);
|
|
|
- await cardholderInput.clear();
|
|
|
- await cardholderInput.fill(updatedData.cardholderName);
|
|
|
- console.debug(` ✓ 更新持卡人姓名: ${updatedData.cardholderName}`);
|
|
|
- }
|
|
|
-
|
|
|
- // 编辑银行卡类型
|
|
|
- if (updatedData.cardType !== undefined) {
|
|
|
- const cardTypeTrigger = page.locator(`[data-testid="card-type-select-${cardIndex}"]`);
|
|
|
- await cardTypeTrigger.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
- await page.getByRole('option', { name: updatedData.cardType }).click();
|
|
|
- console.debug(` ✓ 更新银行卡类型: ${updatedData.cardType}`);
|
|
|
- }
|
|
|
-
|
|
|
- console.debug(` ✓ 银行卡 ${cardIndex} 编辑完成`);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 辅助函数:删除指定索引的银行卡
|
|
|
- */
|
|
|
- async function deleteBankCard(page: any, cardIndex: number) {
|
|
|
- console.debug(` 删除银行卡 ${cardIndex}`);
|
|
|
-
|
|
|
- const removeButton = page.locator(`[data-testid="remove-bank-card-${cardIndex}"]`);
|
|
|
- await removeButton.click();
|
|
|
- await page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
-
|
|
|
- console.debug(` ✓ 银行卡 ${cardIndex} 已删除`);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 辅助函数:获取银行卡列表信息
|
|
|
- */
|
|
|
- async function getBankCardList(page: any): Promise<string[]> {
|
|
|
- const cards: string[] = [];
|
|
|
- const cardCount = await page.locator('[data-testid^="remove-bank-card-"]').count();
|
|
|
-
|
|
|
- for (let i = 0; i < cardCount; i++) {
|
|
|
- // 获取银行卡号输入框的值
|
|
|
- const cardNumberInput = page.locator(`[data-testid="card-number-input-${i}"]`);
|
|
|
- const cardNumber = await cardNumberInput.inputValue();
|
|
|
- cards.push(cardNumber);
|
|
|
- }
|
|
|
-
|
|
|
- return cards;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 辅助函数:获取默认银行卡的索引
|
|
|
- */
|
|
|
- async function getDefaultBankCardIndex(page: any): Promise<number | null> {
|
|
|
- const cardCount = await page.locator('[data-testid^="remove-bank-card-"]').count();
|
|
|
-
|
|
|
- for (let i = 0; i < cardCount; i++) {
|
|
|
- const defaultSwitch = page.locator(`[data-testid="default-card-switch-${i}"]`);
|
|
|
- const isChecked = await defaultSwitch.isChecked();
|
|
|
- if (isChecked) {
|
|
|
- return i;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
test('应该成功添加单张银行卡', async ({ disabilityPersonPage, page }) => {
|
|
|
const testData = generateUniqueTestData('单张银行卡');
|
|
|
createdTestData.push({ name: testData.name, idCard: testData.idCard });
|
|
|
@@ -270,15 +87,15 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
cardholderName: testData.name,
|
|
|
isDefault: true,
|
|
|
};
|
|
|
- await addBankCardInline(page, bankCard);
|
|
|
+ await disabilityPersonPage.addBankCard(bankCard);
|
|
|
|
|
|
// 验证银行卡已添加
|
|
|
- const bankCardList = await getBankCardList(page);
|
|
|
+ const bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(1);
|
|
|
console.debug(' ✓ 银行卡列表数量: 1');
|
|
|
|
|
|
// 验证默认银行卡
|
|
|
- const defaultIndex = await getDefaultBankCardIndex(page);
|
|
|
+ const defaultIndex = await disabilityPersonPage.getDefaultBankCardIndex();
|
|
|
expect(defaultIndex).toBe(0);
|
|
|
console.debug(' ✓ 默认银行卡索引: 0');
|
|
|
|
|
|
@@ -302,7 +119,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
cardNumber: '6222021234567890123',
|
|
|
cardholderName: testData.name,
|
|
|
};
|
|
|
- await addBankCardInline(page, originalCard);
|
|
|
+ await disabilityPersonPage.addBankCard(originalCard);
|
|
|
|
|
|
// 编辑银行卡
|
|
|
const updatedCard = {
|
|
|
@@ -310,10 +127,10 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
subBankName: '上海分行浦东支行',
|
|
|
cardNumber: '6227001234567890123',
|
|
|
};
|
|
|
- await editBankCard(page, 0, updatedCard);
|
|
|
+ await disabilityPersonPage.editBankCard(0, updatedCard);
|
|
|
|
|
|
// 验证更新后的信息
|
|
|
- const bankCardList = await getBankCardList(page);
|
|
|
+ const bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(1);
|
|
|
|
|
|
// 验证银行卡号已更新(格式化后可能包含空格)
|
|
|
@@ -342,18 +159,18 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
cardNumber: '6222021234567890123',
|
|
|
cardholderName: testData.name,
|
|
|
};
|
|
|
- await addBankCardInline(page, bankCard);
|
|
|
+ await disabilityPersonPage.addBankCard(bankCard);
|
|
|
|
|
|
// 验证银行卡存在
|
|
|
- let bankCardList = await getBankCardList(page);
|
|
|
+ let bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(1);
|
|
|
console.debug(' ✓ 银行卡已添加');
|
|
|
|
|
|
// 删除银行卡
|
|
|
- await deleteBankCard(page, 0);
|
|
|
+ await disabilityPersonPage.deleteBankCard(0);
|
|
|
|
|
|
// 验证银行卡已被删除
|
|
|
- bankCardList = await getBankCardList(page);
|
|
|
+ bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(0);
|
|
|
console.debug(' ✓ 银行卡已删除');
|
|
|
|
|
|
@@ -374,21 +191,21 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
await disabilityPersonPage.scrollToSection('银行卡管理');
|
|
|
|
|
|
// 添加三张银行卡
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国工商银行',
|
|
|
subBankName: '北京分行朝阳支行',
|
|
|
cardNumber: '6222021234567890123',
|
|
|
cardholderName: testData.name,
|
|
|
});
|
|
|
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国建设银行',
|
|
|
subBankName: '上海分行浦东支行',
|
|
|
cardNumber: '6227001234567890123',
|
|
|
cardholderName: testData.name,
|
|
|
});
|
|
|
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国农业银行',
|
|
|
subBankName: '广州分行天河支行',
|
|
|
cardNumber: '6228481234567890123',
|
|
|
@@ -396,7 +213,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
});
|
|
|
|
|
|
// 验证所有银行卡都显示
|
|
|
- const bankCardList = await getBankCardList(page);
|
|
|
+ const bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(3);
|
|
|
console.debug(' ✓ 银行卡数量: 3');
|
|
|
|
|
|
@@ -417,7 +234,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
await disabilityPersonPage.scrollToSection('银行卡管理');
|
|
|
|
|
|
// 添加第一张银行卡(设为默认)
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国工商银行',
|
|
|
subBankName: '北京分行朝阳支行',
|
|
|
cardNumber: '6222021234567890123',
|
|
|
@@ -426,7 +243,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
});
|
|
|
|
|
|
// 添加第二张银行卡(不设为默认)
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国建设银行',
|
|
|
subBankName: '上海分行浦东支行',
|
|
|
cardNumber: '6227001234567890123',
|
|
|
@@ -435,17 +252,17 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
});
|
|
|
|
|
|
// 验证默认银行卡是第一张(索引0)
|
|
|
- const defaultIndex = await getDefaultBankCardIndex(page);
|
|
|
+ const defaultIndex = await disabilityPersonPage.getDefaultBankCardIndex();
|
|
|
expect(defaultIndex).toBe(0);
|
|
|
console.debug(' ✓ 默认银行卡是第一张');
|
|
|
|
|
|
// 将第二张设为默认
|
|
|
- const defaultSwitch1 = page.locator('[data-testid="default-card-switch-1"]');
|
|
|
- await defaultSwitch1.click();
|
|
|
+ await disabilityPersonPage.editBankCard(1, { isDefault: true });
|
|
|
await page.waitForTimeout(TIMEOUTS.SHORT);
|
|
|
|
|
|
// 验证默认银行卡变为第二张,第一张不再是默认
|
|
|
const defaultSwitch0 = page.locator('[data-testid="default-card-switch-0"]');
|
|
|
+ const defaultSwitch1 = page.locator('[data-testid="default-card-switch-1"]');
|
|
|
const isDefault0 = await defaultSwitch0.isChecked();
|
|
|
const isDefault1 = await defaultSwitch1.isChecked();
|
|
|
|
|
|
@@ -467,7 +284,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
await disabilityPersonPage.fillBasicForm(testData);
|
|
|
|
|
|
// 添加一类卡
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国工商银行',
|
|
|
subBankName: '北京分行朝阳支行',
|
|
|
cardNumber: '6222021234567890123',
|
|
|
@@ -500,7 +317,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
// 尝试添加5张银行卡
|
|
|
const banks = ['中国工商银行', '中国建设银行', '中国农业银行', '中国银行', '交通银行'];
|
|
|
for (let i = 0; i < 5; i++) {
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: banks[i],
|
|
|
subBankName: `${i}分行`,
|
|
|
cardNumber: `622202123456789${String(i).padStart(3, '0')}`,
|
|
|
@@ -509,13 +326,12 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
}
|
|
|
|
|
|
// 验证有5张银行卡
|
|
|
- let bankCardList = await getBankCardList(page);
|
|
|
- expect(bankCardList).toHaveLength(5);
|
|
|
+ let bankCardCount = await disabilityPersonPage.getBankCardCount();
|
|
|
+ expect(bankCardCount).toBe(5);
|
|
|
console.debug(' ✓ 已添加 5 张银行卡');
|
|
|
|
|
|
// 尝试添加第6张银行卡
|
|
|
- const addButton = page.locator('[data-testid="add-bank-card-button"]');
|
|
|
- const isDisabled = await addButton.isDisabled();
|
|
|
+ const isDisabled = await disabilityPersonPage.isAddBankCardButtonDisabled();
|
|
|
expect(isDisabled).toBe(true);
|
|
|
console.debug(' ✓ 添加按钮已禁用(达到最大数量)');
|
|
|
|
|
|
@@ -536,7 +352,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
await disabilityPersonPage.scrollToSection('银行卡管理');
|
|
|
|
|
|
// 添加多张银行卡
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国工商银行',
|
|
|
subBankName: '北京分行朝阳支行',
|
|
|
cardNumber: '6222021234567890123',
|
|
|
@@ -545,7 +361,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
isDefault: true,
|
|
|
});
|
|
|
|
|
|
- await addBankCardInline(page, {
|
|
|
+ await disabilityPersonPage.addBankCard({
|
|
|
bankName: '中国建设银行',
|
|
|
subBankName: '上海分行浦东支行',
|
|
|
cardNumber: '6227001234567890123',
|
|
|
@@ -554,7 +370,7 @@ test.describe.serial('残疾人管理 - 银行卡管理功能', () => {
|
|
|
});
|
|
|
|
|
|
// 验证银行卡数量
|
|
|
- const bankCardList = await getBankCardList(page);
|
|
|
+ const bankCardList = await disabilityPersonPage.getBankCardList();
|
|
|
expect(bankCardList).toHaveLength(2);
|
|
|
|
|
|
// 提交表单
|