| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /**
- * 验证 mine 页面所有 menu-item 跳转是否正常
- * 目的:发现类似 BUG-14 的路径错配
- */
- import { test, expect } from '@playwright/test';
- import { loginAsTestUser } from '../helpers/login-helper';
- const FRONTEND_URL = process.env.FRONTEND_URL || 'http://127.0.0.1:5173';
- test.describe('mine 页面所有 menu-item 跳转验证 (发现 BUG-14 类问题)', () => {
- // 定义要验证的菜单项
- const MENU_ITEMS = [
- { name: '书籍生成', expectUrl: 'book-generator' },
- { name: '会员中心', expectUrl: 'member' },
- { name: '设置', expectUrl: 'settings' },
- { name: '购买积分包', expectUrl: 'token-packs' },
- { name: '邀请好友', expectUrl: 'invite' },
- ];
- for (const item of MENU_ITEMS) {
- test(`mine 页面"${item.name}"菜单应跳转到含 ${item.expectUrl} 的 URL`, async ({ page }) => {
- // 1) 登录
- const { ok } = await loginAsTestUser(page);
- expect(ok, '登录应该成功').toBe(true);
- // 2) 访问 mine
- await page.goto(`${FRONTEND_URL}/#/pages/mine/index`, { waitUntil: 'networkidle', timeout: 30000 });
- await page.waitForTimeout(3000);
- expect(page.url()).toContain('mine');
- // 3) 找对应菜单项
- const menuItem = page.locator('.menu-item').filter({
- has: page.locator('.menu-text', { hasText: item.name })
- }).first();
- await expect(menuItem, `mine 页面应存在"${item.name}"菜单项`).toBeVisible({ timeout: 10000 });
- // 4) 点击
- const beforeUrl = page.url();
- await menuItem.click();
- await page.waitForTimeout(3000);
- // 5) 验证 URL 变化
- const afterUrl = page.url();
- console.log(`[${item.name}] ${beforeUrl} → ${afterUrl}`);
- if (afterUrl === beforeUrl) {
- throw new Error(`点击"${item.name}"后 URL 没变化!仍在 ${afterUrl}`);
- }
- if (!afterUrl.includes(item.expectUrl)) {
- throw new Error(`点击"${item.name}"后 URL 应包含 '${item.expectUrl}',但实际是: ${afterUrl}`);
- }
- });
- }
- });
|