user.spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { test, expect } from '@playwright/test'
  2. // 测试账号配置
  3. const TEST_USERNAME = process.env.TEST_USERNAME || 'admin'
  4. const TEST_PASSWORD = process.env.TEST_PASSWORD || '123456'
  5. test.describe('用户管理测试', () => {
  6. test.beforeEach(async ({ page }) => {
  7. // 先登录
  8. await page.goto('/login')
  9. await page.getByPlaceholder('用户名').fill(TEST_USERNAME)
  10. await page.getByPlaceholder('密码').fill(TEST_PASSWORD)
  11. await page.getByRole('button', { name: '登录' }).click()
  12. // 等待登录成功
  13. await page.waitForURL(/^(?!.*\/login).*$/, { timeout: 15000 })
  14. // 进入用户管理页面
  15. await page.goto('/user')
  16. await page.waitForLoadState('networkidle')
  17. })
  18. test('用户管理页面正确显示', async ({ page }) => {
  19. // 验证页面元素
  20. await expect(page.getByText('新增用户')).toBeVisible()
  21. await expect(page.getByText('刷新列表')).toBeVisible()
  22. // 验证表格存在
  23. await expect(page.locator('.el-table')).toBeVisible()
  24. })
  25. test('搜索功能正常工作', async ({ page }) => {
  26. // 等待表格加载数据
  27. await page.waitForTimeout(2000)
  28. // 先验证表格有数据
  29. const tableBody = page.locator('.el-table__body')
  30. const hasData = (await tableBody.locator('tr').count()) > 0
  31. // 如果表格有数据,测试搜索功能
  32. if (hasData) {
  33. // 输入搜索关键词
  34. const searchInput = page.getByPlaceholder('请输入用户名')
  35. await expect(searchInput).toBeVisible()
  36. await searchInput.fill('admin')
  37. // 点击搜索
  38. await page.getByRole('button', { name: '搜索' }).click()
  39. await page.waitForTimeout(2000)
  40. // 验证搜索完成(表格依然可见)
  41. await expect(page.locator('.el-table')).toBeVisible()
  42. } else {
  43. // 如果没有数据,至少验证搜索表单可以正常使用
  44. const searchInput = page.getByPlaceholder('请输入用户名')
  45. await expect(searchInput).toBeVisible()
  46. await searchInput.fill('test')
  47. await page.getByRole('button', { name: '搜索' }).click()
  48. await page.waitForTimeout(500)
  49. await expect(page.locator('.el-table')).toBeVisible()
  50. }
  51. })
  52. test('重置按钮清空搜索条件', async ({ page }) => {
  53. // 输入搜索关键词
  54. const searchInput = page.getByPlaceholder('请输入用户名')
  55. if (await searchInput.isVisible()) {
  56. await searchInput.fill('test')
  57. // 点击重置
  58. await page.getByRole('button', { name: '重置' }).click()
  59. await page.waitForTimeout(500)
  60. // 验证搜索框被清空
  61. await expect(searchInput).toHaveValue('')
  62. }
  63. })
  64. test('新增用户弹窗可以打开', async ({ page }) => {
  65. // 点击新增用户
  66. await page.getByRole('button', { name: '新增用户' }).click()
  67. // 验证弹窗显示
  68. await expect(page.getByRole('dialog')).toBeVisible()
  69. await expect(page.locator('.el-dialog__title')).toContainText(/新增用户|编辑用户/)
  70. })
  71. test('新增用户表单验证', async ({ page }) => {
  72. // 打开新增弹窗
  73. await page.getByRole('button', { name: '新增用户' }).click()
  74. await expect(page.getByRole('dialog')).toBeVisible()
  75. // 直接点击确定,触发验证
  76. await page.getByRole('button', { name: '确定' }).click()
  77. await page.waitForTimeout(500)
  78. // 验证表单验证信息
  79. // 根据实际的验证消息调整
  80. await expect(page.getByRole('dialog')).toBeVisible()
  81. })
  82. test('新增用户弹窗可以关闭', async ({ page }) => {
  83. // 打开新增弹窗
  84. await page.getByRole('button', { name: '新增用户' }).click()
  85. await expect(page.getByRole('dialog')).toBeVisible()
  86. // 点击取消
  87. await page.getByRole('button', { name: '取消' }).click()
  88. // 验证弹窗关闭
  89. await expect(page.getByRole('dialog')).not.toBeVisible()
  90. })
  91. test('刷新列表功能正常', async ({ page }) => {
  92. // 点击刷新列表
  93. await page.getByRole('button', { name: '刷新列表' }).click()
  94. // 等待加载完成
  95. await page.waitForTimeout(1000)
  96. // 验证表格仍然存在
  97. await expect(page.locator('.el-table')).toBeVisible()
  98. })
  99. test('角色筛选功能正常', async ({ page }) => {
  100. // 查找角色选择器
  101. const roleSelect = page
  102. .locator('.el-select')
  103. .filter({ hasText: /角色|请选择角色/ })
  104. .first()
  105. if (await roleSelect.isVisible()) {
  106. await roleSelect.click()
  107. await page.waitForTimeout(300)
  108. // 选择管理员
  109. const adminOption = page.getByRole('option', { name: '管理员' })
  110. if (await adminOption.isVisible()) {
  111. await adminOption.click()
  112. await page.waitForTimeout(500)
  113. }
  114. }
  115. })
  116. test('分页功能存在', async ({ page }) => {
  117. // 验证分页组件存在
  118. await expect(page.locator('.el-pagination')).toBeVisible()
  119. })
  120. test('表格显示用户信息', async ({ page }) => {
  121. // 等待表格数据加载
  122. await page.waitForTimeout(1000)
  123. // 验证表格列标题
  124. await expect(page.locator('.el-table')).toContainText('用户名')
  125. await expect(page.locator('.el-table')).toContainText('角色')
  126. })
  127. })