| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /**
- * 针对性测试:登录后点击 mine 页面"书籍生成"链接应跳转
- * 验证 BUG-13:用户反馈点击无反应
- */
- 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 页面"书籍生成"入口跳转 (BUG-13 复现)', () => {
- test('登录后点击 mine 页面"书籍生成"应跳转到 book-generator 页面', async ({ page }) => {
- // 1) 登录
- const { ok, finalUrl } = await loginAsTestUser(page);
- console.log('登录结果:', ok, '最终 URL:', finalUrl);
- expect(ok, '登录应该成功').toBe(true);
- // 2) 访问 mine 页面
- await page.goto(`${FRONTEND_URL}/#/pages/mine/index`, { waitUntil: 'networkidle', timeout: 30000 });
- await page.waitForTimeout(3000);
- // 确认在 mine 页面
- expect(page.url()).toContain('mine');
- // 3) 找"书籍生成"菜单项
- // 源码:<view class="menu-item" @click="goBookGenerator">
- // <text class="menu-text">书籍生成</text>
- // uni-app 渲染为 uni-view/uni-text,里面包 <span>
- const bookGenItem = page.locator('.menu-item').filter({ has: page.locator('.menu-text', { hasText: '书籍生成' }) }).first();
- // 严格断言:必须可见
- await expect(bookGenItem, 'mine 页面应存在"书籍生成"菜单项').toBeVisible({ timeout: 10000 });
- // 4) 点击
- const beforeUrl = page.url();
- console.log('点击前 URL:', beforeUrl);
- await bookGenItem.click();
- await page.waitForTimeout(3000);
- // 5) 验证跳转
- const afterUrl = page.url();
- console.log('点击后 URL:', afterUrl);
- expect(
- afterUrl.includes('book-generator'),
- `点击"书籍生成"后应跳转到 book-generator 页面,但实际是: ${afterUrl}`
- ).toBe(true);
- });
- });
|