auth.spec.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. await page.getByRole('button', { name: '登 录' }).click()
  33. // 等待跳转离开登录页
  34. await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 })
  35. // 验证用户名显示为 admin
  36. await expect(page.locator('.username')).toBeVisible({ timeout: 10000 })
  37. await expect(page.locator('.username')).toContainText('admin')
  38. })
  39. test('登录后可以正常登出', async ({ page }) => {
  40. // 先登录
  41. await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME)
  42. await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD)
  43. await page.getByRole('button', { name: '登 录' }).click()
  44. await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 })
  45. // 点击用户下拉菜单
  46. await page.locator('.user-info').click()
  47. await page.waitForTimeout(500)
  48. // 点击退出登录
  49. await page.getByText('退出登录').click()
  50. // 验证跳转到登录页
  51. await expect(page).toHaveURL(/\/login/, { timeout: 10000 })
  52. })
  53. test('修改密码弹窗可以打开', async ({ page }) => {
  54. // 先登录
  55. await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME)
  56. await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD)
  57. await page.getByRole('button', { name: '登 录' }).click()
  58. await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 })
  59. // 点击用户下拉菜单
  60. await page.locator('.user-info').click()
  61. await page.waitForTimeout(500)
  62. // 点击修改密码
  63. await page.getByText('修改密码').click()
  64. // 验证弹窗显示
  65. await expect(page.getByRole('dialog')).toBeVisible()
  66. await expect(page.locator('.el-dialog').getByText('修改密码')).toBeVisible()
  67. })
  68. })