/** * Uniapp 黄历页面 E2E 测试 * 测试黄历功能的核心业务流程 */ import { test, expect } from '../shared/fixtures/test-fixtures'; import { testLogger } from '../shared/utils/test-logger'; test.describe('黄历页面功能测试 @uniapp @almanac', () => { test.beforeEach(async ({ uniappAlmanacPage }) => { await uniappAlmanacPage.navigate(); }); test('黄历页面 - 正常加载显示', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 正常加载显示'); // 验证页面标题 const title = await uniappAlmanacPage.getPageTitle(); expect(title).toContain('黄历'); // 验证宜忌列表可见 const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.endTest('黄历页面 - 正常加载显示', 'passed'); }); test('黄历页面 - 宜忌信息显示', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 宜忌信息显示'); // 获取宜列表 const yiList = await uniappAlmanacPage.getYiList(); testLogger.info(`宜: ${yiList.join(', ')}`); // 获取忌列表 const jiList = await uniappAlmanacPage.getJiList(); testLogger.info(`忌: ${jiList.join(', ')}`); // 验证宜忌数据不为空 expect(yiList.length + jiList.length).toBeGreaterThanOrEqual(0); testLogger.endTest('黄历页面 - 宜忌信息显示', 'passed'); }); test('黄历页面 - 日期切换功能', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 日期切换功能'); // 获取当前日期 const currentDate = await uniappAlmanacPage.getCurrentDate(); testLogger.info(`当前日期: ${currentDate}`); // 点击下一天 await uniappAlmanacPage.clickNextDate(); // 获取切换后的日期 const nextDate = await uniappAlmanacPage.getCurrentDate(); testLogger.info(`下一天日期: ${nextDate}`); // 验证日期已变化 expect(nextDate).not.toEqual(currentDate); // 点击前一天 await uniappAlmanacPage.clickPrevDate(); // 获取切换后的日期 const prevDate = await uniappAlmanacPage.getCurrentDate(); testLogger.info(`前一天日期: ${prevDate}`); testLogger.endTest('黄历页面 - 日期切换功能', 'passed'); }); test('黄历页面 - 宜忌数据随日期变化', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 宜忌数据随日期变化'); // 获取当前宜忌 const yiList1 = await uniappAlmanacPage.getYiList(); const jiList1 = await uniappAlmanacPage.getJiList(); // 切换日期 await uniappAlmanacPage.clickNextDate(); // 获取新的宜忌 const yiList2 = await uniappAlmanacPage.getYiList(); const jiList2 = await uniappAlmanacPage.getJiList(); // 验证宜忌数据已更新(可能相同也可能不同) testLogger.info(`日期1 - 宜: ${yiList1.length}项, 忌: ${jiList1.length}项`); testLogger.info(`日期2 - 宜: ${yiList2.length}项, 忌: ${jiList2.length}项`); testLogger.endTest('黄历页面 - 宜忌数据随日期变化', 'passed'); }); test('黄历页面 - 跨月日期切换', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 跨月日期切换'); // 连续切换多天,跨越月份 for (let i = 0; i < 35; i++) { await uniappAlmanacPage.clickNextDate(); } // 验证页面正常 const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.endTest('黄历页面 - 跨月日期切换', 'passed'); }); test('黄历页面 - 特殊节日显示', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 特殊节日显示'); // 导航到春节(假设可以通过某种方式设置日期) await uniappAlmanacPage.navigate(); // 获取当前日期信息 const currentDate = await uniappAlmanacPage.getCurrentDate(); // 验证页面正常显示 const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.info(`当前日期: ${currentDate}`); testLogger.endTest('黄历页面 - 特殊节日显示', 'passed'); }); }); test.describe('黄历页面边界测试 @uniapp @almanac @boundary', () => { test.beforeEach(async ({ uniappAlmanacPage }) => { await uniappAlmanacPage.navigate(); }); test('黄历页面 - 快速连续切换日期', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 快速连续切换日期'); // 快速连续点击 for (let i = 0; i < 20; i++) { await uniappAlmanacPage['page'].click('[data-testid="next-date"]').catch(() => {}); } // 等待页面稳定 await uniappAlmanacPage.waitForTimeout(1000); // 验证页面没有崩溃 const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.endTest('黄历页面 - 快速连续切换日期', 'passed'); }); test('黄历页面 - 跨年日期切换', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 跨年日期切换'); // 连续切换365天 for (let i = 0; i < 365; i++) { await uniappAlmanacPage.clickNextDate(); } // 验证页面正常 const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.endTest('黄历页面 - 跨年日期切换', 'passed'); }); test('黄历页面 - 响应式布局', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 响应式布局'); // 设置不同的视口大小 const viewports = [ { width: 375, height: 667 }, { width: 414, height: 896 }, { width: 768, height: 1024 }, ]; for (const viewport of viewports) { await uniappAlmanacPage['page'].setViewportSize(viewport); await uniappAlmanacPage.reload(); const yiList = await uniappAlmanacPage.getYiList(); expect(yiList.length).toBeGreaterThanOrEqual(0); testLogger.info(`视口 ${viewport.width}x${viewport.height}: 正常显示`); } testLogger.endTest('黄历页面 - 响应式布局', 'passed'); }); }); test.describe('黄历页面性能测试 @uniapp @almanac @performance', () => { test('黄历页面 - 加载性能', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 加载性能'); const startTime = Date.now(); await uniappAlmanacPage.navigate(); const loadTime = Date.now() - startTime; // 验证加载时间小于3秒 expect(loadTime).toBeLessThan(3000); testLogger.info(`页面加载时间: ${loadTime}ms`); testLogger.endTest('黄历页面 - 加载性能', 'passed'); }); test('黄历页面 - 日期切换性能', async ({ uniappAlmanacPage }) => { testLogger.startTest('黄历页面 - 日期切换性能'); await uniappAlmanacPage.navigate(); const startTime = Date.now(); // 连续切换30天 for (let i = 0; i < 30; i++) { await uniappAlmanacPage.clickNextDate(); } const switchTime = Date.now() - startTime; // 验证切换时间小于3秒 expect(switchTime).toBeLessThan(3000); testLogger.info(`30天切换时间: ${switchTime}ms`); testLogger.endTest('黄历页面 - 日期切换性能', 'passed'); }); });