admin-panel.spec.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * ================================================================
  3. * 场景:后台管理全流程 E2E 测试
  4. * ================================================================
  5. * 目标:管理员通过 cfc-web Element UI 管理后台进行用户管理、数据看板等
  6. * 部署地址:http://cfc.iwintrue.com/admin
  7. *
  8. * 流程步骤:
  9. * 1. 管理员查看用户列表
  10. * 2. 管理员查看数据看板
  11. * 3. 能量规则管理(复用 energy-rules-config.spec.js)
  12. * 4. 系统健康检查
  13. *
  14. * 前置条件:已登录管理员账号
  15. * ================================================================
  16. */
  17. const { test, expect } = require('@playwright/test');
  18. async function ensureLoggedIn(page) {
  19. const sidebar = page.locator('.sidebar-container, .el-menu-vertical-demo, .el-aside');
  20. if (await sidebar.isVisible({ timeout: 3000 }).catch(() => false)) {
  21. return;
  22. }
  23. await page.goto('/login');
  24. await page.waitForSelector('.el-input__inner', { timeout: 15000 });
  25. await page.fill('.el-input__inner', 'admin', { timeout: 5000 });
  26. const passwordInputs = page.locator('.el-input__inner').filter({ hasPlaceholder: /密码/ });
  27. if (await passwordInputs.count() > 0) {
  28. await passwordInputs.first().fill('admin123');
  29. } else {
  30. const inputs = page.locator('.el-input__inner');
  31. const count = await inputs.count();
  32. if (count >= 2) {
  33. await inputs.nth(1).fill('admin123');
  34. }
  35. }
  36. await page.click('.el-button--primary.login-btn, .el-button[type="primary"]:not(.skip)');
  37. await page.waitForURL(/\/dashboard|\/admin\/dashboard/, { timeout: 15000 });
  38. }
  39. test.describe('【场景流程】后台管理全流程', () => {
  40. test('[场景1] 管理员查看用户列表 - 期望返回分页列表', async ({ page }) => {
  41. await ensureLoggedIn(page);
  42. await page.goto('/users');
  43. await page.waitForLoadState('networkidle');
  44. await expect(page.locator('.el-table')).toBeVisible({ timeout: 10000 });
  45. const rows = page.locator('.el-table__body tr');
  46. const count = await rows.count();
  47. expect(count).toBeGreaterThan(0);
  48. });
  49. test('[场景2] 管理员查看数据看板 - 期望返回统计数据', async ({ page }) => {
  50. await ensureLoggedIn(page);
  51. await page.goto('/dashboard');
  52. await page.waitForLoadState('networkidle');
  53. // Element UI cards / stat panels
  54. const statCards = page.locator('.el-card, .stat-panel');
  55. const count = await statCards.count();
  56. expect(count).toBeGreaterThan(0);
  57. });
  58. test('[场景3] 管理员查看能量规则管理', async ({ page }) => {
  59. await ensureLoggedIn(page);
  60. await page.goto('/energy-rule');
  61. await page.waitForLoadState('networkidle');
  62. await expect(page.locator('.el-table')).toBeVisible({ timeout: 10000 });
  63. const rows = page.locator('.el-table__body tr');
  64. const count = await rows.count();
  65. expect(count).toBeGreaterThan(0);
  66. });
  67. test('[场景4] 系统健康检查 - 期望返回健康状态', async ({ page }) => {
  68. await ensureLoggedIn(page);
  69. await page.goto('/sys-config');
  70. await page.waitForLoadState('networkidle');
  71. // 系统配置页面应该可见
  72. await expect(page.locator('.el-card, .sys-config-page')).toBeVisible({ timeout: 10000 });
  73. });
  74. });