94 lines
2.5 KiB
TypeScript
94 lines
2.5 KiB
TypeScript
|
|
/**
|
||
|
|
* 超管端 E2E 测试 - 通用工具函数
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { Page, expect } from '@playwright/test';
|
||
|
|
import { ADMIN_CONFIG } from './fixtures';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 使用超管账号登录
|
||
|
|
*/
|
||
|
|
export async function loginAsAdmin(page: Page) {
|
||
|
|
await page.goto('/login');
|
||
|
|
|
||
|
|
// 点击超管角色按钮(使用 CSS 选择器定位角色选择区域)
|
||
|
|
await page.locator('.role-btn').filter({ hasText: '超管' }).first().click();
|
||
|
|
|
||
|
|
// 输入账号密码
|
||
|
|
await page.getByPlaceholder('请输入账号').fill(ADMIN_CONFIG.account);
|
||
|
|
await page.getByPlaceholder('请输入密码').fill(ADMIN_CONFIG.password);
|
||
|
|
|
||
|
|
// 点击登录按钮(使用 CSS 选择器)
|
||
|
|
await page.locator('.login-btn').click();
|
||
|
|
|
||
|
|
// 等待跳转到仪表盘
|
||
|
|
await page.waitForURL(`**${ADMIN_CONFIG.dashboardPath}*`);
|
||
|
|
await expect(page).toHaveURL(new RegExp(`${ADMIN_CONFIG.dashboardPath}`));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 退出登录
|
||
|
|
*/
|
||
|
|
export async function logout(page: Page) {
|
||
|
|
// 点击右上角用户菜单
|
||
|
|
await page.getByRole('button', { name: /退出登录|退出|logout/i }).click();
|
||
|
|
await page.waitForURL('**/login*');
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 等待表格加载完成
|
||
|
|
*/
|
||
|
|
export async function waitForTable(page: Page, timeout = 10000) {
|
||
|
|
await page.waitForSelector('table, .ant-table', { timeout });
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 等待弹窗显示
|
||
|
|
*/
|
||
|
|
export async function waitForModal(page: Page, title?: string, timeout = 5000) {
|
||
|
|
if (title) {
|
||
|
|
await page.getByText(title).waitFor({ timeout });
|
||
|
|
} else {
|
||
|
|
await page.waitForSelector('.ant-modal', { timeout });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 等待成功提示
|
||
|
|
*/
|
||
|
|
export async function waitForSuccess(page: Page, message?: string, timeout = 5000) {
|
||
|
|
if (message) {
|
||
|
|
await page.getByText(message).waitFor({ timeout });
|
||
|
|
} else {
|
||
|
|
await page.waitForSelector('.ant-message-success', { timeout });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 等待错误提示
|
||
|
|
*/
|
||
|
|
export async function waitForError(page: Page, message?: string, timeout = 5000) {
|
||
|
|
if (message) {
|
||
|
|
await page.getByText(message).waitFor({ timeout });
|
||
|
|
} else {
|
||
|
|
await page.waitForSelector('.ant-message-error', { timeout });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 在表格中查找并点击操作按钮
|
||
|
|
*/
|
||
|
|
export async function clickRowAction(page: Page, rowName: string, action: string) {
|
||
|
|
const row = page.getByRole('row').filter({ hasText: rowName });
|
||
|
|
await row.getByRole('button', { name: action }).click();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 关闭弹窗
|
||
|
|
*/
|
||
|
|
export async function closeModal(page: Page) {
|
||
|
|
await page.keyboard.press('Escape');
|
||
|
|
// 或者点击关闭按钮
|
||
|
|
await page.locator('.ant-modal-close').click();
|
||
|
|
}
|