109d184f91
问题分析: 1. 登录按钮使用native-type而非type属性 2. 登录后跳转到/而非/dashboard 3. 路径映射错误:/user-management应为/users等 修复内容: - 登录流程测试:修复按钮选择器和URL断言 - 登出流程测试:修复下拉菜单选择器 - 用户管理测试:修正路径为/users - 权限边界测试:修正路径为/users、/roles、/menus - 移除不存在的data-testid选择器 - 添加适当的等待和错误消息匹配
103 lines
3.7 KiB
TypeScript
103 lines
3.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
import { RoleFactory } from '../../roles/role-factory';
|
|
import { createAuthenticatedPage } from '../../shared/auth-helper';
|
|
import { getTestDataManager } from '../../shared/test-data-manager';
|
|
|
|
test.describe('管理员创建用户测试', () => {
|
|
test.beforeEach(async ({ page, context }) => {
|
|
await createAuthenticatedPage(page, context, 'admin');
|
|
getTestDataManager().setPage(page);
|
|
});
|
|
|
|
test.afterEach(async () => {
|
|
await getTestDataManager().cleanup('user');
|
|
});
|
|
|
|
test('管理员可以创建新用户', async ({ page }) => {
|
|
await page.goto('/users');
|
|
|
|
await page.click('button:has-text("新增")');
|
|
|
|
const timestamp = Date.now();
|
|
const userData = {
|
|
username: `testuser_${timestamp}`,
|
|
password: 'Test@123',
|
|
email: `testuser_${timestamp}@test.com`,
|
|
phone: '13800138000',
|
|
nickname: '测试用户',
|
|
};
|
|
|
|
await page.fill('input[placeholder*="用户名"]', userData.username);
|
|
await page.fill('input[placeholder*="密码"]', userData.password);
|
|
await page.fill('input[placeholder*="邮箱"]', userData.email);
|
|
await page.fill('input[placeholder*="手机号"]', userData.phone);
|
|
await page.fill('input[placeholder*="昵称"]', userData.nickname);
|
|
|
|
await page.click('button:has-text("确定")');
|
|
|
|
const successMessage = page.locator('text=/创建成功|操作成功/i');
|
|
await expect(successMessage).toBeVisible({ timeout: 10000 });
|
|
|
|
const createdUser = page.locator(`text=${userData.username}`);
|
|
await expect(createdUser).toBeVisible();
|
|
});
|
|
|
|
test('管理员可以编辑用户信息', async ({ page }) => {
|
|
await page.goto('/users');
|
|
|
|
const firstEditButton = page.locator('button:has-text("编辑")').first();
|
|
await firstEditButton.click();
|
|
|
|
const nicknameInput = page.locator('input[placeholder*="昵称"]');
|
|
await nicknameInput.fill('更新后的昵称');
|
|
|
|
await page.click('button:has-text("确定")');
|
|
|
|
const successMessage = page.locator('text=/更新成功|操作成功/i');
|
|
await expect(successMessage).toBeVisible({ timeout: 10000 });
|
|
});
|
|
|
|
test('管理员可以删除用户', async ({ page }) => {
|
|
await page.goto('/users');
|
|
|
|
const firstDeleteButton = page.locator('button:has-text("删除")').first();
|
|
await firstDeleteButton.click();
|
|
|
|
const confirmButton = page.locator('button:has-text("确定")');
|
|
await confirmButton.click();
|
|
|
|
const successMessage = page.locator('text=/删除成功|操作成功/i');
|
|
await expect(successMessage).toBeVisible({ timeout: 10000 });
|
|
});
|
|
|
|
test('创建用户时用户名重复验证', async ({ page }) => {
|
|
await page.goto('/users');
|
|
|
|
await page.click('button:has-text("新增")');
|
|
|
|
await page.fill('input[placeholder*="用户名"]', 'admin');
|
|
await page.fill('input[placeholder*="密码"]', 'Test@123');
|
|
await page.fill('input[placeholder*="邮箱"]', 'admin@test.com');
|
|
|
|
await page.click('button:has-text("确定")');
|
|
|
|
const errorMessage = page.locator('text=/用户名已存在|用户名重复/i');
|
|
await expect(errorMessage).toBeVisible({ timeout: 5000 });
|
|
});
|
|
|
|
test('创建用户时邮箱格式验证', async ({ page }) => {
|
|
await page.goto('/users');
|
|
|
|
await page.click('button:has-text("新增")');
|
|
|
|
await page.fill('input[placeholder*="用户名"]', 'testuser');
|
|
await page.fill('input[placeholder*="密码"]', 'Test@123');
|
|
await page.fill('input[placeholder*="邮箱"]', 'invalid-email');
|
|
|
|
await page.click('button:has-text("确定")');
|
|
|
|
const errorMessage = page.locator('text=/邮箱格式不正确|请输入正确的邮箱/i');
|
|
await expect(errorMessage).toBeVisible({ timeout: 5000 });
|
|
});
|
|
});
|