mine-book-gen-link.spec.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * 针对性测试:登录后点击 mine 页面"书籍生成"链接应跳转
  3. * 验证 BUG-13:用户反馈点击无反应
  4. */
  5. import { test, expect } from '@playwright/test';
  6. import { loginAsTestUser } from '../helpers/login-helper';
  7. const FRONTEND_URL = process.env.FRONTEND_URL || 'http://127.0.0.1:5173';
  8. test.describe('mine 页面"书籍生成"入口跳转 (BUG-13 复现)', () => {
  9. test('登录后点击 mine 页面"书籍生成"应跳转到 book-generator 页面', async ({ page }) => {
  10. // 1) 登录
  11. const { ok, finalUrl } = await loginAsTestUser(page);
  12. console.log('登录结果:', ok, '最终 URL:', finalUrl);
  13. expect(ok, '登录应该成功').toBe(true);
  14. // 2) 访问 mine 页面
  15. await page.goto(`${FRONTEND_URL}/#/pages/mine/index`, { waitUntil: 'networkidle', timeout: 30000 });
  16. await page.waitForTimeout(3000);
  17. // 确认在 mine 页面
  18. expect(page.url()).toContain('mine');
  19. // 3) 找"书籍生成"菜单项
  20. // 源码:<view class="menu-item" @click="goBookGenerator">
  21. // <text class="menu-text">书籍生成</text>
  22. // uni-app 渲染为 uni-view/uni-text,里面包 <span>
  23. const bookGenItem = page.locator('.menu-item').filter({ has: page.locator('.menu-text', { hasText: '书籍生成' }) }).first();
  24. // 严格断言:必须可见
  25. await expect(bookGenItem, 'mine 页面应存在"书籍生成"菜单项').toBeVisible({ timeout: 10000 });
  26. // 4) 点击
  27. const beforeUrl = page.url();
  28. console.log('点击前 URL:', beforeUrl);
  29. await bookGenItem.click();
  30. await page.waitForTimeout(3000);
  31. // 5) 验证跳转
  32. const afterUrl = page.url();
  33. console.log('点击后 URL:', afterUrl);
  34. expect(
  35. afterUrl.includes('book-generator'),
  36. `点击"书籍生成"后应跳转到 book-generator 页面,但实际是: ${afterUrl}`
  37. ).toBe(true);
  38. });
  39. });