users.spec.ts 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import { test, expect } from '../../utils/test-setup';
  2. import testUsers from '../../fixtures/test-users.json' with { type: 'json' };
  3. test.describe('用户管理 E2E 测试', () => {
  4. test.beforeEach(async ({ adminLoginPage, userManagementPage }) => {
  5. // 以管理员身份登录
  6. await adminLoginPage.goto();
  7. await adminLoginPage.login(testUsers.admin.username, testUsers.admin.password);
  8. await userManagementPage.goto();
  9. await userManagementPage.expectToBeVisible();
  10. });
  11. test('用户列表页面加载', async ({ userManagementPage }) => {
  12. await userManagementPage.expectToBeVisible();
  13. await expect(userManagementPage.pageTitle).toHaveText('用户管理');
  14. });
  15. test('搜索用户功能', async ({ userManagementPage }) => {
  16. // 在搜索框中输入关键词
  17. await userManagementPage.searchInput.fill('test');
  18. await userManagementPage.searchButton.click();
  19. // 验证搜索结果
  20. await expect(userManagementPage.userTable).toBeVisible();
  21. const userRows = await userManagementPage.getUserRows();
  22. expect(userRows.length).toBeGreaterThan(0);
  23. });
  24. test('创建新用户', async ({ userManagementPage }) => {
  25. const testUser = {
  26. username: `testuser_${Date.now()}`,
  27. password: 'Test123!',
  28. email: `test${Date.now()}@example.com`
  29. };
  30. // 打开创建用户对话框
  31. await userManagementPage.createUserButton.click();
  32. await expect(userManagementPage.createUserDialog).toBeVisible();
  33. // 填写用户信息
  34. await userManagementPage.usernameInput.fill(testUser.username);
  35. await userManagementPage.passwordInput.fill(testUser.password);
  36. await userManagementPage.emailInput.fill(testUser.email);
  37. // 提交表单
  38. await userManagementPage.submitCreateUserButton.click();
  39. // 验证用户创建成功
  40. await expect(userManagementPage.successToast).toBeVisible();
  41. await expect(userManagementPage.successToast).toContainText('创建成功');
  42. });
  43. test('编辑用户信息', async ({ userManagementPage }) => {
  44. // 获取第一个用户
  45. const firstUserRow = userManagementPage.getUserRow(0);
  46. await expect(firstUserRow).toBeVisible();
  47. // 点击编辑按钮
  48. await userManagementPage.getEditButton(0).click();
  49. await expect(userManagementPage.editUserDialog).toBeVisible();
  50. // 修改用户信息
  51. const newEmail = `updated${Date.now()}@example.com`;
  52. await userManagementPage.emailInput.fill(newEmail);
  53. // 提交更新
  54. await userManagementPage.submitEditUserButton.click();
  55. // 验证更新成功
  56. await expect(userManagementPage.successToast).toBeVisible();
  57. await expect(userManagementPage.successToast).toContainText('更新成功');
  58. });
  59. test('删除用户', async ({ userManagementPage }) => {
  60. // 获取用户行数
  61. const initialUserCount = (await userManagementPage.getUserRows()).length;
  62. if (initialUserCount > 0) {
  63. // 点击第一个用户的删除按钮
  64. await userManagementPage.getDeleteButton(0).click();
  65. await expect(userManagementPage.deleteConfirmDialog).toBeVisible();
  66. // 确认删除
  67. await userManagementPage.confirmDeleteButton.click();
  68. // 验证删除成功
  69. await expect(userManagementPage.successToast).toBeVisible();
  70. await expect(userManagementPage.successToast).toContainText('删除成功');
  71. // 验证用户数量减少
  72. const finalUserCount = (await userManagementPage.getUserRows()).length;
  73. expect(finalUserCount).toBe(initialUserCount - 1);
  74. }
  75. });
  76. test('用户列表分页', async ({ userManagementPage }) => {
  77. // 验证分页控件存在
  78. await expect(userManagementPage.pagination).toBeVisible();
  79. // 如果有第二页,测试翻页
  80. if (await userManagementPage.nextPageButton.isVisible()) {
  81. await userManagementPage.nextPageButton.click();
  82. await expect(userManagementPage.currentPageIndicator).toContainText('2');
  83. // 返回第一页
  84. await userManagementPage.previousPageButton.click();
  85. await expect(userManagementPage.currentPageIndicator).toContainText('1');
  86. }
  87. });
  88. test('用户状态筛选', async ({ userManagementPage }) => {
  89. // 打开高级筛选
  90. await userManagementPage.advancedFilterButton.click();
  91. await expect(userManagementPage.filterPanel).toBeVisible();
  92. // 选择启用状态
  93. await userManagementPage.statusFilter.selectOption('0');
  94. await userManagementPage.applyFilterButton.click();
  95. // 验证筛选结果
  96. const userRows = await userManagementPage.getUserRows();
  97. expect(userRows.length).toBeGreaterThan(0);
  98. // 验证用户状态
  99. for (const row of userRows) {
  100. const statusBadge = row.locator('[data-testid="user-status"]');
  101. await expect(statusBadge).toHaveText('启用');
  102. }
  103. });
  104. test('重置筛选条件', async ({ userManagementPage }) => {
  105. // 应用筛选条件
  106. await userManagementPage.advancedFilterButton.click();
  107. await userManagementPage.statusFilter.selectOption('1');
  108. await userManagementPage.applyFilterButton.click();
  109. // 重置筛选
  110. await userManagementPage.resetFilterButton.click();
  111. // 验证所有用户显示
  112. const userRows = await userManagementPage.getUserRows();
  113. expect(userRows.length).toBeGreaterThan(0);
  114. });
  115. test('用户列表排序', async ({ userManagementPage }) => {
  116. // 点击用户名排序
  117. await userManagementPage.usernameHeader.click();
  118. // 获取排序后的用户名
  119. const firstUsername = await userManagementPage.getUsername(0);
  120. const secondUsername = await userManagementPage.getUsername(1);
  121. // 验证排序(升序)
  122. expect(firstUsername.localeCompare(secondUsername)).toBeLessThanOrEqual(0);
  123. // 再次点击进行降序排序
  124. await userManagementPage.usernameHeader.click();
  125. const firstUsernameDesc = await userManagementPage.getUsername(0);
  126. const secondUsernameDesc = await userManagementPage.getUsername(1);
  127. // 验证降序排序
  128. expect(firstUsernameDesc.localeCompare(secondUsernameDesc)).toBeGreaterThanOrEqual(0);
  129. });
  130. test('响应式布局 - 桌面端', async ({ userManagementPage, page }) => {
  131. await page.setViewportSize({ width: 1200, height: 800 });
  132. await userManagementPage.expectToBeVisible();
  133. // 验证桌面端布局元素
  134. await expect(userManagementPage.searchInput).toBeVisible();
  135. await expect(userManagementPage.createUserButton).toBeVisible();
  136. await expect(userManagementPage.userTable).toBeVisible();
  137. });
  138. test('响应式布局 - 移动端', async ({ userManagementPage, page }) => {
  139. await page.setViewportSize({ width: 375, height: 667 });
  140. await userManagementPage.expectToBeVisible();
  141. // 验证移动端布局
  142. await expect(userManagementPage.pageTitle).toBeVisible();
  143. await expect(userManagementPage.mobileMenuButton).toBeVisible();
  144. });
  145. });