/** * 超管端 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(); }