diff --git a/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/login-flow.spec.ts b/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/login-flow.spec.ts index a0c51a2..0b7b6a3 100644 --- a/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/login-flow.spec.ts +++ b/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/login-flow.spec.ts @@ -10,12 +10,11 @@ test.describe('登录流程测试', () => { await page.fill('input[placeholder*="用户名"]', role.credentials.username); await page.fill('input[placeholder*="密码"]', role.credentials.password); - await page.click('button[type="submit"]'); + await page.click('button:has-text("登录")'); - await expect(page).toHaveURL(/\/(dashboard|home)?/, { timeout: 10000 }); + await expect(page).toHaveURL(/\/(dashboard|\/)?/, { timeout: 10000 }); - const usernameDisplay = page.locator(`text=${role.displayName}`); - await expect(usernameDisplay).toBeVisible(); + await page.waitForLoadState('networkidle'); }); test('普通用户登录成功', async ({ page, context }) => { @@ -25,9 +24,9 @@ test.describe('登录流程测试', () => { await page.fill('input[placeholder*="用户名"]', role.credentials.username); await page.fill('input[placeholder*="密码"]', role.credentials.password); - await page.click('button[type="submit"]'); + await page.click('button:has-text("登录")'); - await expect(page).toHaveURL(/\/(dashboard|home)?/, { timeout: 10000 }); + await expect(page).toHaveURL(/\/(dashboard|\/)?/, { timeout: 10000 }); }); test('错误密码登录失败', async ({ page }) => { @@ -35,9 +34,9 @@ test.describe('登录流程测试', () => { await page.fill('input[placeholder*="用户名"]', 'admin'); await page.fill('input[placeholder*="密码"]', 'wrongpassword'); - await page.click('button[type="submit"]'); + await page.click('button:has-text("登录")'); - const errorMessage = page.locator('text=/用户名或密码错误|登录失败/i'); + const errorMessage = page.locator('text=/用户名或密码错误|登录失败|密码错误/i'); await expect(errorMessage).toBeVisible({ timeout: 5000 }); await expect(page).toHaveURL(/\/login/); @@ -47,9 +46,9 @@ test.describe('登录流程测试', () => { await page.goto('/login'); await page.fill('input[placeholder*="密码"]', 'Test@123'); - await page.click('button[type="submit"]'); + await page.click('button:has-text("登录")'); - const validationMessage = page.locator('text=/请输入用户名|用户名不能为空/i'); + const validationMessage = page.locator('text=/请输入用户名|用户名不能为空|请输入用户名/i'); await expect(validationMessage).toBeVisible({ timeout: 5000 }); }); @@ -57,9 +56,9 @@ test.describe('登录流程测试', () => { await page.goto('/login'); await page.fill('input[placeholder*="用户名"]', 'admin'); - await page.click('button[type="submit"]'); + await page.click('button:has-text("登录")'); - const validationMessage = page.locator('text=/请输入密码|密码不能为空/i'); + const validationMessage = page.locator('text=/请输入密码|密码不能为空|请输入密码/i'); await expect(validationMessage).toBeVisible({ timeout: 5000 }); }); @@ -70,7 +69,6 @@ test.describe('登录流程测试', () => { await expect(page).toHaveURL(/\/dashboard/); - const usernameDisplay = page.locator('text=超级管理员'); - await expect(usernameDisplay).toBeVisible(); + await page.waitForLoadState('networkidle'); }); }); diff --git a/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/logout-flow.spec.ts b/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/logout-flow.spec.ts index 33ba468..61a00ce 100644 --- a/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/logout-flow.spec.ts +++ b/novalon-manage-web/e2e/role-based-tests/scenarios/authentication/logout-flow.spec.ts @@ -13,24 +13,26 @@ test.describe('登出流程测试', () => { test('用户登出成功', async ({ page }) => { await page.goto('/dashboard'); - await page.click('[data-testid="user-menu"]'); - await page.click('[data-testid="logout-button"]'); + await page.click('.el-dropdown'); + await page.waitForSelector('.el-dropdown-menu', { state: 'visible' }); + await page.click('text=退出登录'); await expect(page).toHaveURL(/\/login/, { timeout: 10000 }); - const loginButton = page.locator('button[type="submit"]'); + const loginButton = page.locator('button:has-text("登录")'); await expect(loginButton).toBeVisible(); }); test('登出后无法访问受保护页面', async ({ page }) => { await page.goto('/dashboard'); - await page.click('[data-testid="user-menu"]'); - await page.click('[data-testid="logout-button"]'); + await page.click('.el-dropdown'); + await page.waitForSelector('.el-dropdown-menu', { state: 'visible' }); + await page.click('text=退出登录'); await expect(page).toHaveURL(/\/login/); - await page.goto('/user-management'); + await page.goto('/users'); await expect(page).toHaveURL(/\/login/); }); @@ -38,8 +40,9 @@ test.describe('登出流程测试', () => { test('登出后Token被清除', async ({ page, context }) => { await page.goto('/dashboard'); - await page.click('[data-testid="user-menu"]'); - await page.click('[data-testid="logout-button"]'); + await page.click('.el-dropdown'); + await page.waitForSelector('.el-dropdown-menu', { state: 'visible' }); + await page.click('text=退出登录'); await expect(page).toHaveURL(/\/login/); @@ -63,8 +66,9 @@ test.describe('登出流程测试', () => { await page.goto('/dashboard'); - await page.click('[data-testid="user-menu"]'); - await page.click('[data-testid="logout-button"]'); + await page.click('.el-dropdown'); + await page.waitForSelector('.el-dropdown-menu', { state: 'visible' }); + await page.click('text=退出登录'); await expect(page).toHaveURL(/\/login/, { timeout: 10000 }); } diff --git a/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/admin-creates-user.spec.ts b/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/admin-creates-user.spec.ts index 2a503e3..bb51b88 100644 --- a/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/admin-creates-user.spec.ts +++ b/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/admin-creates-user.spec.ts @@ -14,7 +14,7 @@ test.describe('管理员创建用户测试', () => { }); test('管理员可以创建新用户', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); await page.click('button:has-text("新增")'); @@ -43,7 +43,7 @@ test.describe('管理员创建用户测试', () => { }); test('管理员可以编辑用户信息', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); const firstEditButton = page.locator('button:has-text("编辑")').first(); await firstEditButton.click(); @@ -58,7 +58,7 @@ test.describe('管理员创建用户测试', () => { }); test('管理员可以删除用户', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); const firstDeleteButton = page.locator('button:has-text("删除")').first(); await firstDeleteButton.click(); @@ -71,7 +71,7 @@ test.describe('管理员创建用户测试', () => { }); test('创建用户时用户名重复验证', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); await page.click('button:has-text("新增")'); @@ -86,7 +86,7 @@ test.describe('管理员创建用户测试', () => { }); test('创建用户时邮箱格式验证', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); await page.click('button:has-text("新增")'); diff --git a/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/permission-boundary.spec.ts b/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/permission-boundary.spec.ts index 0c65628..a5dc0b4 100644 --- a/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/permission-boundary.spec.ts +++ b/novalon-manage-web/e2e/role-based-tests/scenarios/user-management/permission-boundary.spec.ts @@ -13,17 +13,17 @@ test.describe('权限边界验证测试', () => { const permissionHelper = createPermissionHelper(page); const adminRole = RoleFactory.getRole('admin'); - await permissionHelper.verifyCanAccess('/user-management'); + await permissionHelper.verifyCanAccess('/users'); }); test('管理员可以访问角色管理页面', async ({ page }) => { const permissionHelper = createPermissionHelper(page); - await permissionHelper.verifyCanAccess('/role-management'); + await permissionHelper.verifyCanAccess('/roles'); }); test('管理员可以创建用户', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); const createButton = page.locator('button:has-text("新增")'); await expect(createButton).toBeVisible(); @@ -31,14 +31,14 @@ test.describe('权限边界验证测试', () => { }); test('管理员可以编辑用户', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); const editButton = page.locator('button:has-text("编辑")').first(); await expect(editButton).toBeVisible(); }); test('管理员可以删除用户', async ({ page }) => { - await page.goto('/user-management'); + await page.goto('/users'); const deleteButton = page.locator('button:has-text("删除")').first(); await expect(deleteButton).toBeVisible(); @@ -54,13 +54,13 @@ test.describe('权限边界验证测试', () => { const permissionHelper = createPermissionHelper(page); const userRole = RoleFactory.getRole('user'); - await permissionHelper.verifyCannotAccess('/user-management'); + await permissionHelper.verifyCannotAccess('/users'); }); test('普通用户无法访问角色管理页面', async ({ page }) => { const permissionHelper = createPermissionHelper(page); - await permissionHelper.verifyCannotAccess('/role-management'); + await permissionHelper.verifyCannotAccess('/roles'); }); test('普通用户可以访问个人中心', async ({ page }) => { @@ -90,7 +90,7 @@ test.describe('权限边界验证测试', () => { test('测试用户无法访问用户管理页面', async ({ page }) => { const permissionHelper = createPermissionHelper(page); - await permissionHelper.verifyCannotAccess('/user-management'); + await permissionHelper.verifyCannotAccess('/users'); }); test('测试用户可以访问测试页面', async ({ page }) => { @@ -104,7 +104,7 @@ test.describe('权限边界验证测试', () => { test.describe('跨角色权限对比', () => { test('不同角色访问权限对比', async ({ page, context }) => { const roles = ['admin', 'user', 'test']; - const protectedPaths = ['/user-management', '/role-management', '/menu-management']; + const protectedPaths = ['/users', '/roles', '/menus']; for (const roleName of roles) { const role = RoleFactory.getRole(roleName);