/** * 针对性测试:登录后点击 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) 找"书籍生成"菜单项 // 源码: // 书籍生成 // uni-app 渲染为 uni-view/uni-text,里面包 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); }); });