auth.spec.ts 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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.evaluate(() => {
  10. localStorage.clear()
  11. document.cookie.split(';').forEach((c) => {
  12. document.cookie = c.replace(/^ +/, '').replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/')
  13. })
  14. })
  15. await page.reload()
  16. })
  17. test('登录页面正确显示', async ({ page }) => {
  18. await expect(page.getByPlaceholder('请输入用户名')).toBeVisible()
  19. await expect(page.getByPlaceholder('请输入密码')).toBeVisible()
  20. await expect(page.getByRole('button', { name: '登 录' })).toBeVisible()
  21. await expect(page.getByText('记住我')).toBeVisible()
  22. })
  23. test('空表单提交显示验证错误', async ({ page }) => {
  24. await page.getByRole('button', { name: '登 录' }).click()
  25. await expect(page.getByText('请输入用户名')).toBeVisible()
  26. await expect(page.getByText('请输入密码')).toBeVisible()
  27. })
  28. test('登录成功并显示用户名 admin', async ({ page }) => {
  29. // 输入登录信息
  30. await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME)
  31. await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD)
  32. // 等待登录按钮可用并点击
  33. const loginBtn = page.getByRole('button', { name: '登 录' })
  34. await expect(loginBtn).toBeEnabled()
  35. await loginBtn.click()
  36. // 等待登录 API 响应并跳转
  37. await page.waitForURL(/^(?!.*\/login).*$/, { timeout: 15000 })
  38. // 验证用户名显示为 admin
  39. await expect(page.locator('.username')).toBeVisible({ timeout: 10000 })
  40. await expect(page.locator('.username')).toContainText('admin')
  41. })
  42. test('登录后可以正常登出', async ({ page }) => {
  43. // 先登录
  44. await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME)
  45. await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD)
  46. const loginBtn = page.getByRole('button', { name: '登 录' })
  47. await expect(loginBtn).toBeEnabled()
  48. await loginBtn.click()
  49. await page.waitForURL(/^(?!.*\/login).*$/, { timeout: 15000 })
  50. // 点击用户下拉菜单
  51. await page.locator('.user-info').click()
  52. await page.waitForTimeout(500)
  53. // 点击退出登录
  54. await page.getByText('退出登录').click()
  55. // 验证跳转到登录页
  56. await expect(page).toHaveURL(/\/login/, { timeout: 10000 })
  57. })
  58. test('修改密码弹窗可以打开', async ({ page }) => {
  59. // 先登录
  60. await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME)
  61. await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD)
  62. const loginBtn = page.getByRole('button', { name: '登 录' })
  63. await expect(loginBtn).toBeEnabled()
  64. await loginBtn.click()
  65. await page.waitForURL(/^(?!.*\/login).*$/, { timeout: 15000 })
  66. // 点击用户下拉菜单
  67. await page.locator('.user-info').click()
  68. await page.waitForTimeout(500)
  69. // 点击修改密码
  70. await page.getByText('修改密码').click()
  71. // 验证弹窗显示
  72. await expect(page.getByRole('dialog')).toBeVisible()
  73. await expect(page.locator('.el-dialog').getByText('修改密码')).toBeVisible()
  74. })
  75. })