/** * ================================================================ * 场景:能量规则配置全流程 E2E 测试 * ================================================================ * 用户故事:管理员配置五维能量发放规则 * * 流程步骤: * 1. 查看能量规则列表 * 2. 创建新规则 * 3. 启用/禁用规则 * 4. 编辑/删除规则 * * 关键里程碑: * - [Milestone-1] 返回规则列表 * - [Milestone-2] 规则管理成功 * ================================================================ * * 运行:npx playwright test tests/e2e/energy-rules-config.spec.js */ const { test, expect } = require('@playwright/test'); test.describe('【场景流程】能量规则配置全流程', () => { // ===== 场景1:查看能量规则列表 ===== test('[场景1] 查看能量规则列表 - 期望返回规则列表', async ({ page }) => { // ========== Given:管理员进入能量规则页 ========== await page.goto('/#/pages/admin/energy-rules'); await page.waitForLoadState('networkidle'); // ========== When:查看规则列表 ========== await page.waitForSelector('.rule-list, .energy-rule-list', { timeout: 10000 }); // ========== Then:Milestone-1 - 返回规则列表 ======== const ruleItems = page.locator('.rule-item, .energy-rule'); const count = await ruleItems.count(); expect(count).toBeGreaterThan(0); // 验证规则包含维度信息 const firstRule = ruleItems.first(); const dimensionTag = firstRule.locator('.dimension-tag, .rule-type'); if (await dimensionTag.isVisible()) { const tagText = await dimensionTag.textContent(); expect(tagText).toBeTruthy(); } }); // ===== 场景2:创建能量规则 ===== test('[场景2] 创建能量规则 - 期望规则创建成功', async ({ page }) => { // ========== Given:管理员进入创建规则页 ========== await page.goto('/#/pages/admin/energy-rule-create'); await page.waitForLoadState('networkidle'); // ========== When:创建规则 ========== await page.waitForSelector('.rule-form', { timeout: 5000 }); // 选择维度 const dimensionSelect = page.locator('.dimension-picker, select[name="dimension"]'); if (await dimensionSelect.isVisible()) { await dimensionSelect.selectOption('body'); } // 选择事件类型 const eventSelect = page.locator('.event-picker, select[name="eventType"]'); if (await eventSelect.isVisible()) { await eventSelect.selectOption('checkin'); } // 输入能量值 const valueInput = page.locator('input[name="energyValue"], .value-input'); if (await valueInput.isVisible()) { await valueInput.fill('5'); } // 提交 await page.click('.submit-btn, .save-btn'); // ========== Then:Milestone-2 - 创建成功 ======== await page.waitForSelector('.success-tip, .rule-created', { timeout: 10000 }); expect(await page.locator('.success-tip, .rule-created').isVisible()).toBeTruthy(); }); // ===== 场景3:启用/禁用规则 ===== test('[场景3] 启用/禁用规则 - 期望状态切换成功', async ({ page }) => { // ========== Given:管理员进入规则页 ========== await page.goto('/#/pages/admin/energy-rules'); await page.waitForLoadState('networkidle'); // ========== When:切换规则状态 ========== await page.waitForSelector('.rule-item', { timeout: 10000 }); const toggleBtn = page.locator('.toggle-btn, .rule-toggle').first(); if (await toggleBtn.isVisible()) { await toggleBtn.click(); } // ========== Then:状态切换成功 ======== await page.waitForTimeout(500); // 验证状态变化 const statusTag = page.locator('.status-tag, .rule-status').first(); if (await statusTag.isVisible()) { const statusText = await statusTag.textContent(); expect(statusText).toBeTruthy(); } }); // ===== 场景4:编辑/删除规则 ===== test('[场景4] 编辑/删除规则 - 期望操作成功', async ({ page }) => { // ========== Given:管理员进入规则页 ========== await page.goto('/#/pages/admin/energy-rules'); await page.waitForLoadState('networkidle'); // ========== When:编辑规则 ========== await page.waitForSelector('.rule-item', { timeout: 10000 }); const firstRule = page.locator('.rule-item').first(); const editBtn = firstRule.locator('.edit-btn'); if (await editBtn.isVisible()) { await editBtn.click(); } else { await firstRule.click(); } await page.waitForSelector('.edit-form, .rule-form', { timeout: 5000 }); // 修改能量值 const valueInput = page.locator('input[name="energyValue"], .value-input'); if (await valueInput.isVisible()) { await valueInput.fill('10'); } // 保存 await page.click('.save-btn, .submit-btn'); // ========== Then:操作成功 ======== await page.waitForSelector('.success-tip, .update-success', { timeout: 10000 }); expect(await page.locator('.success-tip, .update-success').isVisible()).toBeTruthy(); }); });