energy-rules-config.spec.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /**
  2. * ================================================================
  3. * 场景:能量规则配置全流程 E2E 测试
  4. * ================================================================
  5. * 用户故事:管理员配置五维能量发放规则
  6. *
  7. * 流程步骤:
  8. * 1. 查看能量规则列表
  9. * 2. 创建新规则
  10. * 3. 启用/禁用规则
  11. * 4. 编辑/删除规则
  12. *
  13. * 关键里程碑:
  14. * - [Milestone-1] 返回规则列表
  15. * - [Milestone-2] 规则管理成功
  16. * ================================================================
  17. *
  18. * 运行:npx playwright test tests/e2e/energy-rules-config.spec.js
  19. */
  20. const { test, expect } = require('@playwright/test');
  21. test.describe('【场景流程】能量规则配置全流程', () => {
  22. // ===== 场景1:查看能量规则列表 =====
  23. test('[场景1] 查看能量规则列表 - 期望返回规则列表', async ({ page }) => {
  24. // ========== Given:管理员进入能量规则页 ==========
  25. await page.goto('/#/pages/admin/energy-rules');
  26. await page.waitForLoadState('networkidle');
  27. // ========== When:查看规则列表 ==========
  28. await page.waitForSelector('.rule-list, .energy-rule-list', { timeout: 10000 });
  29. // ========== Then:Milestone-1 - 返回规则列表 ========
  30. const ruleItems = page.locator('.rule-item, .energy-rule');
  31. const count = await ruleItems.count();
  32. expect(count).toBeGreaterThan(0);
  33. // 验证规则包含维度信息
  34. const firstRule = ruleItems.first();
  35. const dimensionTag = firstRule.locator('.dimension-tag, .rule-type');
  36. if (await dimensionTag.isVisible()) {
  37. const tagText = await dimensionTag.textContent();
  38. expect(tagText).toBeTruthy();
  39. }
  40. });
  41. // ===== 场景2:创建能量规则 =====
  42. test('[场景2] 创建能量规则 - 期望规则创建成功', async ({ page }) => {
  43. // ========== Given:管理员进入创建规则页 ==========
  44. await page.goto('/#/pages/admin/energy-rule-create');
  45. await page.waitForLoadState('networkidle');
  46. // ========== When:创建规则 ==========
  47. await page.waitForSelector('.rule-form', { timeout: 5000 });
  48. // 选择维度
  49. const dimensionSelect = page.locator('.dimension-picker, select[name="dimension"]');
  50. if (await dimensionSelect.isVisible()) {
  51. await dimensionSelect.selectOption('body');
  52. }
  53. // 选择事件类型
  54. const eventSelect = page.locator('.event-picker, select[name="eventType"]');
  55. if (await eventSelect.isVisible()) {
  56. await eventSelect.selectOption('checkin');
  57. }
  58. // 输入能量值
  59. const valueInput = page.locator('input[name="energyValue"], .value-input');
  60. if (await valueInput.isVisible()) {
  61. await valueInput.fill('5');
  62. }
  63. // 提交
  64. await page.click('.submit-btn, .save-btn');
  65. // ========== Then:Milestone-2 - 创建成功 ========
  66. await page.waitForSelector('.success-tip, .rule-created', { timeout: 10000 });
  67. expect(await page.locator('.success-tip, .rule-created').isVisible()).toBeTruthy();
  68. });
  69. // ===== 场景3:启用/禁用规则 =====
  70. test('[场景3] 启用/禁用规则 - 期望状态切换成功', async ({ page }) => {
  71. // ========== Given:管理员进入规则页 ==========
  72. await page.goto('/#/pages/admin/energy-rules');
  73. await page.waitForLoadState('networkidle');
  74. // ========== When:切换规则状态 ==========
  75. await page.waitForSelector('.rule-item', { timeout: 10000 });
  76. const toggleBtn = page.locator('.toggle-btn, .rule-toggle').first();
  77. if (await toggleBtn.isVisible()) {
  78. await toggleBtn.click();
  79. }
  80. // ========== Then:状态切换成功 ========
  81. await page.waitForTimeout(500);
  82. // 验证状态变化
  83. const statusTag = page.locator('.status-tag, .rule-status').first();
  84. if (await statusTag.isVisible()) {
  85. const statusText = await statusTag.textContent();
  86. expect(statusText).toBeTruthy();
  87. }
  88. });
  89. // ===== 场景4:编辑/删除规则 =====
  90. test('[场景4] 编辑/删除规则 - 期望操作成功', async ({ page }) => {
  91. // ========== Given:管理员进入规则页 ==========
  92. await page.goto('/#/pages/admin/energy-rules');
  93. await page.waitForLoadState('networkidle');
  94. // ========== When:编辑规则 ==========
  95. await page.waitForSelector('.rule-item', { timeout: 10000 });
  96. const firstRule = page.locator('.rule-item').first();
  97. const editBtn = firstRule.locator('.edit-btn');
  98. if (await editBtn.isVisible()) {
  99. await editBtn.click();
  100. } else {
  101. await firstRule.click();
  102. }
  103. await page.waitForSelector('.edit-form, .rule-form', { timeout: 5000 });
  104. // 修改能量值
  105. const valueInput = page.locator('input[name="energyValue"], .value-input');
  106. if (await valueInput.isVisible()) {
  107. await valueInput.fill('10');
  108. }
  109. // 保存
  110. await page.click('.save-btn, .submit-btn');
  111. // ========== Then:操作成功 ========
  112. await page.waitForSelector('.success-tip, .update-success', { timeout: 10000 });
  113. expect(await page.locator('.success-tip, .update-success').isVisible()).toBeTruthy();
  114. });
  115. });