08ea5fbe98
添加用户管理视图、API和状态管理文件
169 lines
5.6 KiB
TypeScript
169 lines
5.6 KiB
TypeScript
import { test as base, expect, Page } from '@playwright/test';
|
|
import { LoginPage } from '../pages/login-page';
|
|
import { DashboardPage } from '../pages/dashboard-page';
|
|
import { UserManagementPage } from '../pages/user-management-page';
|
|
import { testConfig } from '../core/test-config';
|
|
|
|
export type UATFixtures = {
|
|
uatLogin: LoginPage;
|
|
uatDashboard: DashboardPage;
|
|
uatUserManagement: UserManagementPage;
|
|
};
|
|
|
|
export const test = base.extend<UATFixtures>({
|
|
uatLogin: async ({ page }, use) => {
|
|
const loginPage = new LoginPage(page);
|
|
await use(loginPage);
|
|
},
|
|
uatDashboard: async ({ page }, use) => {
|
|
const dashboardPage = new DashboardPage(page);
|
|
await use(dashboardPage);
|
|
},
|
|
uatUserManagement: async ({ page }, use) => {
|
|
const userManagementPage = new UserManagementPage(page);
|
|
await use(userManagementPage);
|
|
}
|
|
});
|
|
|
|
test.describe.configure({
|
|
mode: 'serial',
|
|
timeout: 60000
|
|
});
|
|
|
|
export const UATTestSteps = {
|
|
async completeUserRegistrationFlow(page: Page, username: string, password: string) {
|
|
const loginPage = new LoginPage(page);
|
|
|
|
await test.step('用户打开登录页面', async () => {
|
|
await page.goto(testConfig.getBaseURL());
|
|
await expect(page).toHaveTitle(/登录/);
|
|
});
|
|
|
|
await test.step('用户输入用户名和密码', async () => {
|
|
await loginPage.login(username, password);
|
|
});
|
|
|
|
await test.step('验证用户成功登录并跳转到仪表盘', async () => {
|
|
await expect(page).toHaveURL(/.*dashboard/);
|
|
});
|
|
},
|
|
|
|
async completeUserManagementFlow(page: Page, username: string, email: string, role: string) {
|
|
const dashboardPage = new DashboardPage(page);
|
|
const userManagementPage = new UserManagementPage(page);
|
|
|
|
await test.step('用户导航到用户管理页面', async () => {
|
|
await dashboardPage.navigateToUserManagement();
|
|
await expect(page).toHaveURL(/.*users/);
|
|
});
|
|
|
|
await test.step('用户点击新增用户按钮', async () => {
|
|
await userManagementPage.clickAddUser();
|
|
});
|
|
|
|
await test.step('用户填写用户信息', async () => {
|
|
await userManagementPage.fillUserForm({
|
|
username,
|
|
email,
|
|
password: 'Test@123456',
|
|
confirmPassword: 'Test@123456',
|
|
role,
|
|
status: 'ACTIVE'
|
|
});
|
|
});
|
|
|
|
await test.step('用户提交表单', async () => {
|
|
await userManagementPage.submitUserForm();
|
|
});
|
|
|
|
await test.step('验证用户创建成功', async () => {
|
|
await expect(page.locator('.ant-message-success')).toBeVisible();
|
|
});
|
|
},
|
|
|
|
async completeAlmanacQueryFlow(page: Page, date: string) {
|
|
await test.step('用户打开黄历查询页面', async () => {
|
|
await page.goto(`${testConfig.getBaseURL()}/almanac`);
|
|
});
|
|
|
|
await test.step('用户选择日期', async () => {
|
|
await page.fill('[data-testid="date-picker"]', date);
|
|
});
|
|
|
|
await test.step('用户点击查询按钮', async () => {
|
|
await page.click('[data-testid="query-button"]');
|
|
});
|
|
|
|
await test.step('验证黄历信息显示', async () => {
|
|
await expect(page.locator('[data-testid="almanac-result"]')).toBeVisible();
|
|
await expect(page.locator('[data-testid="suitable-activities"]')).toBeVisible();
|
|
await expect(page.locator('[data-testid="unsuitable-activities"]')).toBeVisible();
|
|
});
|
|
},
|
|
|
|
async completeFortuneAnalysisFlow(page: Page) {
|
|
await test.step('用户打开运势分析页面', async () => {
|
|
await page.goto(`${testConfig.getBaseURL()}/fortune`);
|
|
});
|
|
|
|
await test.step('用户查看每日运势', async () => {
|
|
await expect(page.locator('[data-testid="daily-fortune"]')).toBeVisible();
|
|
});
|
|
|
|
await test.step('用户查看每月运势', async () => {
|
|
await page.click('[data-testid="monthly-fortune-tab"]');
|
|
await expect(page.locator('[data-testid="monthly-fortune"]')).toBeVisible();
|
|
});
|
|
|
|
await test.step('用户查看每年运势', async () => {
|
|
await page.click('[data-testid="yearly-fortune-tab"]');
|
|
await expect(page.locator('[data-testid="yearly-fortune"]')).toBeVisible();
|
|
});
|
|
},
|
|
|
|
async completeZiweiChartGenerationFlow(page: Page, birthDate: string, birthTime: string) {
|
|
await test.step('用户打开紫微斗数页面', async () => {
|
|
await page.goto(`${testConfig.getBaseURL()}/ziwei`);
|
|
});
|
|
|
|
await test.step('用户输入出生日期和时间', async () => {
|
|
await page.fill('[data-testid="birth-date"]', birthDate);
|
|
await page.fill('[data-testid="birth-time"]', birthTime);
|
|
});
|
|
|
|
await test.step('用户选择性别', async () => {
|
|
await page.click('[data-testid="gender-male"]');
|
|
});
|
|
|
|
await test.step('用户点击生成命盘按钮', async () => {
|
|
await page.click('[data-testid="generate-chart-button"]');
|
|
});
|
|
|
|
await test.step('验证命盘生成成功', async () => {
|
|
await expect(page.locator('[data-testid="ziwei-chart"]')).toBeVisible();
|
|
await expect(page.locator('[data-testid="palace-grid"]')).toBeVisible();
|
|
});
|
|
}
|
|
};
|
|
|
|
export const UATAssertions = {
|
|
assertPageTitle(page: Page, expectedTitle: string) {
|
|
return expect(page).toHaveTitle(new RegExp(expectedTitle));
|
|
},
|
|
|
|
assertElementVisible(page: Page, selector: string) {
|
|
return expect(page.locator(selector)).toBeVisible();
|
|
},
|
|
|
|
assertElementText(page: Page, selector: string, expectedText: string) {
|
|
return expect(page.locator(selector)).toHaveText(expectedText);
|
|
},
|
|
|
|
assertSuccessMessage(page: Page, message: string) {
|
|
return expect(page.locator('.ant-message-success')).toContainText(message);
|
|
},
|
|
|
|
assertErrorMessage(page: Page, message: string) {
|
|
return expect(page.locator('.ant-message-error')).toContainText(message);
|
|
}
|
|
}; |