dashboard.spec.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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('/dashboard')
  16. await page.waitForLoadState('networkidle')
  17. })
  18. test('仪表盘页面正确显示', async ({ page }) => {
  19. // 验证页面标题
  20. await expect(page.locator('.dashboard__title')).toBeVisible()
  21. await expect(page.locator('.dashboard__title')).toContainText('仪表盘')
  22. })
  23. test('显示统计卡片', async ({ page }) => {
  24. // 验证统计卡片存在
  25. await expect(page.locator('.dashboard__stats')).toBeVisible()
  26. // 验证有多个统计卡片
  27. const cards = page.locator('.dashboard__card')
  28. await expect(cards).toHaveCount(4)
  29. })
  30. test('显示机器总数', async ({ page }) => {
  31. // 等待数据加载
  32. await page.waitForTimeout(1000)
  33. // 验证机器总数卡片
  34. await expect(page.getByText('机器总数')).toBeVisible()
  35. })
  36. test('显示摄像头总数', async ({ page }) => {
  37. // 验证摄像头总数卡片
  38. await expect(page.getByText('摄像头总数')).toBeVisible()
  39. })
  40. test('显示通道总数', async ({ page }) => {
  41. // 验证通道总数卡片
  42. await expect(page.getByText('通道总数')).toBeVisible()
  43. })
  44. test('显示摄像头在线率', async ({ page }) => {
  45. // 验证在线率卡片
  46. await expect(page.getByText('摄像头在线率')).toBeVisible()
  47. })
  48. test('快捷操作区域存在', async ({ page }) => {
  49. // 验证快捷操作区域
  50. await expect(page.getByText('快捷操作')).toBeVisible()
  51. await expect(page.locator('.dashboard__actions')).toBeVisible()
  52. })
  53. test('刷新数据按钮可用', async ({ page }) => {
  54. // 验证刷新按钮存在
  55. const refreshBtn = page.locator('.dashboard__refresh')
  56. await expect(refreshBtn).toBeVisible()
  57. // 点击刷新
  58. await refreshBtn.click()
  59. await page.waitForTimeout(1000)
  60. // 验证页面仍然正常
  61. await expect(page.locator('.dashboard__stats')).toBeVisible()
  62. })
  63. test('点击摄像头管理跳转正确', async ({ page }) => {
  64. // 点击摄像头管理
  65. const action = page.locator('.dashboard__action').filter({ hasText: '摄像头管理' })
  66. await action.click()
  67. // 验证跳转
  68. await expect(page).toHaveURL(/\/camera/)
  69. })
  70. test('点击机器管理跳转正确', async ({ page }) => {
  71. // 点击机器管理
  72. const action = page.locator('.dashboard__action').filter({ hasText: '机器管理' })
  73. await action.click()
  74. // 验证跳转
  75. await expect(page).toHaveURL(/\/machine/)
  76. })
  77. test('点击观看统计跳转正确', async ({ page }) => {
  78. // 点击观看统计
  79. const action = page.locator('.dashboard__action').filter({ hasText: '观看统计' })
  80. await action.click()
  81. // 验证跳转
  82. await expect(page).toHaveURL(/\/stats/)
  83. })
  84. test('系统信息区域存在', async ({ page }) => {
  85. // 验证系统信息区域
  86. await expect(page.getByText('系统信息')).toBeVisible()
  87. await expect(page.locator('.dashboard__info')).toBeVisible()
  88. })
  89. test('显示系统状态正常', async ({ page }) => {
  90. // 验证系统状态显示
  91. await expect(page.locator('.dashboard__info').getByText('系统状态')).toBeVisible()
  92. await expect(page.locator('.dashboard__badge--success')).toContainText('正常')
  93. })
  94. test('显示版本号', async ({ page }) => {
  95. // 验证版本号显示
  96. await expect(page.getByText('版本')).toBeVisible()
  97. await expect(page.getByText(/v\d+\.\d+\.\d+/)).toBeVisible()
  98. })
  99. test('显示数据更新时间', async ({ page }) => {
  100. // 等待数据加载
  101. await page.waitForTimeout(1000)
  102. // 验证更新时间显示
  103. await expect(page.getByText('数据更新时间')).toBeVisible()
  104. })
  105. })