
> reading-platform-frontend@1.0.0 test:e2e
> playwright test --grep admin --reporter=list


Running 113 tests using 1 worker

  ok   1 [chromium] › tests\e2e\admin\01-login.spec.ts:10:3 › 超管登录流程 › 超管登录成功 (1.6s)
  ok   2 [chromium] › tests\e2e\admin\01-login.spec.ts:18:3 › 超管登录流程 › 验证跳转到正确的仪表盘页面 (1.4s)
  ok   3 [chromium] › tests\e2e\admin\01-login.spec.ts:27:3 › 超管登录流程 › 记住登录状态 (1.6s)
  ok   4 [chromium] › tests\e2e\admin\01-login.spec.ts:37:3 › 超管登录流程 › 错误密码登录失败 (971ms)
  ok   5 [chromium] › tests\e2e\admin\01-login.spec.ts:54:3 › 超管登录流程 › 账号不存在登录失败 (967ms)
  x    6 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:14:3 › 数据看板 › 验证统计卡片显示 (11.5s)
  x    7 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:35:3 › 数据看板 › 验证趋势图加载 (12.2s)
  x    8 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:41:3 › 数据看板 › 验证活跃租户 TOP5 列表 (1.5s)
  x    9 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:51:3 › 数据看板 › 验证热门课程包 TOP5 列表 (2.8s)
  ok  10 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:61:3 › 数据看板 › 验证快捷入口点击跳转 - 创建课程包 (2.2s)
  ok  11 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:71:3 › 数据看板 › 验证快捷入口点击跳转 - 管理租户 (1.7s)
  ok  12 [chromium] › tests\e2e\admin\02-dashboard.spec.ts:81:3 › 数据看板 › 验证快捷入口点击跳转 - 资源库 (1.6s)
  ok  13 [chromium] › tests\e2e\admin\03-courses.spec.ts:17:5 › 课程包管理 › 列表页面 › 访问课程包列表页面 (1.4s)
  x   14 [chromium] › tests\e2e\admin\03-courses.spec.ts:22:5 › 课程包管理 › 列表页面 › 验证列表加载 (2.6s)
  x   15 [chromium] › tests\e2e\admin\03-courses.spec.ts:35:5 › 课程包管理 › 列表页面 › 搜索功能 (3.1s)
  x   16 [chromium] › tests\e2e\admin\03-courses.spec.ts:51:5 › 课程包管理 › 列表页面 › 筛选功能 - 按状态 (31.3s)
  x   17 [chromium] › tests\e2e\admin\03-courses.spec.ts:67:5 › 课程包管理 › 列表页面 › 分页功能 (8.2s)
  ok  18 [chromium] › tests\e2e\admin\03-courses.spec.ts:77:5 › 课程包管理 › 创建课程包 › 点击创建按钮 (2.7s)
  x   19 [chromium] › tests\e2e\admin\03-courses.spec.ts:87:5 › 课程包管理 › 创建课程包 › 步骤 1: 填写基本信息 (2.3s)
  x   20 [chromium] › tests\e2e\admin\03-courses.spec.ts:111:5 › 课程包管理 › 创建课程包 › 步骤 2: 课程介绍 (2.9s)
  x   21 [chromium] › tests\e2e\admin\03-courses.spec.ts:140:5 › 课程包管理 › 创建课程包 › 步骤 3: 排课参考 (4.5s)
  ok  22 [chromium] › tests\e2e\admin\03-courses.spec.ts:172:5 › 课程包管理 › 编辑课程包 › 点击编辑按钮 (2.0s)
  ok  23 [chromium] › tests\e2e\admin\03-courses.spec.ts:186:5 › 课程包管理 › 编辑课程包 › 修改基本信息 (1.6s)
  ok  24 [chromium] › tests\e2e\admin\03-courses.spec.ts:211:5 › 课程包管理 › 删除课程包 › 点击删除按钮 (1.6s)
  ok  25 [chromium] › tests\e2e\admin\03-courses.spec.ts:222:5 › 课程包管理 › 删除课程包 › 确认删除弹窗 (1.7s)
  ok  26 [chromium] › tests\e2e\admin\03-courses.spec.ts:244:5 › 课程包管理 › 课程包详情 › 查看详情页 (1.4s)
  ok  27 [chromium] › tests\e2e\admin\03-courses.spec.ts:258:5 › 课程包管理 › 课程包详情 › 查看课程资源 (1.8s)
  ok  28 [chromium] › tests\e2e\admin\04-packages.spec.ts:17:5 › 套餐管理 › 列表页面 › 访问套餐列表页面 (1.3s)
  x   29 [chromium] › tests\e2e\admin\04-packages.spec.ts:22:5 › 套餐管理 › 列表页面 › 验证列表加载 (1.9s)
  ok  30 [chromium] › tests\e2e\admin\04-packages.spec.ts:35:5 › 套餐管理 › 列表页面 › 验证套餐列表数据 (4.5s)
  x   31 [chromium] › tests\e2e\admin\04-packages.spec.ts:45:5 › 套餐管理 › 创建套餐 › 点击创建按钮 (31.1s)
  ok  32 [chromium] › tests\e2e\admin\04-packages.spec.ts:54:5 › 套餐管理 › 创建套餐 › 填写套餐信息 (3.7s)
  ok  33 [chromium] › tests\e2e\admin\04-packages.spec.ts:79:5 › 套餐管理 › 创建套餐 › 设置配额 (2.8s)
  ok  34 [chromium] › tests\e2e\admin\04-packages.spec.ts:103:5 › 套餐管理 › 创建套餐 › 保存套餐 (2.2s)
  ok  35 [chromium] › tests\e2e\admin\04-packages.spec.ts:152:5 › 套餐管理 › 编辑套餐 › 点击编辑按钮 (1.5s)
  ok  36 [chromium] › tests\e2e\admin\04-packages.spec.ts:165:5 › 套餐管理 › 编辑套餐 › 修改套餐信息 (1.6s)
  ok  37 [chromium] › tests\e2e\admin\04-packages.spec.ts:194:5 › 套餐管理 › 删除套餐 › 点击删除按钮 (1.4s)
  ok  38 [chromium] › tests\e2e\admin\04-packages.spec.ts:204:5 › 套餐管理 › 删除套餐 › 确认删除弹窗 (1.4s)
  ok  39 [chromium] › tests\e2e\admin\05-themes.spec.ts:17:5 › 主题字典 › 列表页面 › 访问主题列表页面 (1.7s)
  x   40 [chromium] › tests\e2e\admin\05-themes.spec.ts:22:5 › 主题字典 › 列表页面 › 验证列表加载 (2.2s)
  ok  41 [chromium] › tests\e2e\admin\05-themes.spec.ts:35:5 › 主题字典 › 列表页面 › 验证主题列表数据 (2.4s)
  x   42 [chromium] › tests\e2e\admin\05-themes.spec.ts:45:5 › 主题字典 › 创建主题 › 点击创建按钮 (31.5s)
  ok  43 [chromium] › tests\e2e\admin\05-themes.spec.ts:54:5 › 主题字典 › 创建主题 › 填写主题信息 (2.0s)
  ok  44 [chromium] › tests\e2e\admin\05-themes.spec.ts:79:5 › 主题字典 › 创建主题 › 上传主题图片 (2.0s)
  ok  45 [chromium] › tests\e2e\admin\05-themes.spec.ts:98:5 › 主题字典 › 创建主题 › 保存主题 (1.9s)
  ok  46 [chromium] › tests\e2e\admin\05-themes.spec.ts:127:5 › 主题字典 › 编辑主题 › 点击编辑按钮 (1.4s)
  ok  47 [chromium] › tests\e2e\admin\05-themes.spec.ts:140:5 › 主题字典 › 编辑主题 › 修改主题信息 (1.4s)
  ok  48 [chromium] › tests\e2e\admin\05-themes.spec.ts:169:5 › 主题字典 › 删除主题 › 点击删除按钮 (1.3s)
  ok  49 [chromium] › tests\e2e\admin\05-themes.spec.ts:179:5 › 主题字典 › 删除主题 › 确认删除弹窗 (1.7s)
  ok  50 [chromium] › tests\e2e\admin\06-tenants.spec.ts:17:5 › 租户管理 › 列表页面 › 访问租户列表页面 (1.6s)
  x   51 [chromium] › tests\e2e\admin\06-tenants.spec.ts:22:5 › 租户管理 › 列表页面 › 验证列表加载 (1.9s)
  x   52 [chromium] › tests\e2e\admin\06-tenants.spec.ts:35:5 › 租户管理 › 列表页面 › 搜索功能 (1.7s)
  x   53 [chromium] › tests\e2e\admin\06-tenants.spec.ts:53:5 › 租户管理 › 列表页面 › 筛选功能 - 按状态 (2.0s)
  x   54 [chromium] › tests\e2e\admin\06-tenants.spec.ts:71:5 › 租户管理 › 列表页面 › 筛选功能 - 按套餐 (1.9s)
  x   55 [chromium] › tests\e2e\admin\06-tenants.spec.ts:89:5 › 租户管理 › 列表页面 › 分页功能 (6.7s)
  x   56 [chromium] › tests\e2e\admin\06-tenants.spec.ts:99:5 › 租户管理 › 创建租户 › 点击添加租户按钮 (30.9s)
  x   57 [chromium] › tests\e2e\admin\06-tenants.spec.ts:112:5 › 租户管理 › 创建租户 › 填写基本信息 (30.9s)
  x   58 [chromium] › tests\e2e\admin\06-tenants.spec.ts:137:5 › 租户管理 › 创建租户 › 选择套餐类型 (31.0s)
  x   59 [chromium] › tests\e2e\admin\06-tenants.spec.ts:153:5 › 租户管理 › 创建租户 › 设置配额 (31.0s)
  x   60 [chromium] › tests\e2e\admin\06-tenants.spec.ts:174:5 › 租户管理 › 创建租户 › 设置有效期 (31.0s)
  x   61 [chromium] › tests\e2e\admin\06-tenants.spec.ts:187:5 › 租户管理 › 创建租户 › 保存租户 (30.9s)
  ok  62 [chromium] › tests\e2e\admin\06-tenants.spec.ts:243:5 › 租户管理 › 查看租户详情 › 点击租户查看详情 (1.7s)
  ok  63 [chromium] › tests\e2e\admin\06-tenants.spec.ts:257:5 › 租户管理 › 查看租户详情 › 查看基本信息 (1.4s)
  ok  64 [chromium] › tests\e2e\admin\06-tenants.spec.ts:271:5 › 租户管理 › 查看租户详情 › 查看教师列表 (1.4s)
  ok  65 [chromium] › tests\e2e\admin\06-tenants.spec.ts:285:5 › 租户管理 › 查看租户详情 › 查看学生列表 (1.3s)
  ok  66 [chromium] › tests\e2e\admin\06-tenants.spec.ts:301:5 › 租户管理 › 编辑租户 › 点击编辑按钮 (1.4s)
  ok  67 [chromium] › tests\e2e\admin\06-tenants.spec.ts:319:5 › 租户管理 › 编辑租户 › 修改基本信息 (1.4s)
  ok  68 [chromium] › tests\e2e\admin\06-tenants.spec.ts:351:5 › 租户管理 › 编辑租户 › 修改配额 (1.4s)
  ok  69 [chromium] › tests\e2e\admin\06-tenants.spec.ts:372:5 › 租户管理 › 租户状态管理 › 禁用租户 (1.4s)
  ok  70 [chromium] › tests\e2e\admin\06-tenants.spec.ts:399:5 › 租户管理 › 租户状态管理 › 启用租户 (1.4s)
  ok  71 [chromium] › tests\e2e\admin\06-tenants.spec.ts:428:5 › 租户管理 › 重置密码 › 点击重置密码 (1.4s)
  ok  72 [chromium] › tests\e2e\admin\06-tenants.spec.ts:455:5 › 租户管理 › 删除租户 › 点击删除按钮 (1.4s)
  ok  73 [chromium] › tests\e2e\admin\06-tenants.spec.ts:472:5 › 租户管理 › 删除租户 › 确认删除弹窗 (1.4s)
  ok  74 [chromium] › tests\e2e\admin\07-resources.spec.ts:17:5 › 资源库 › 列表页面 › 访问资源库列表页面 (1.3s)
  x   75 [chromium] › tests\e2e\admin\07-resources.spec.ts:22:5 › 资源库 › 列表页面 › 验证列表加载 (1.5s)
  x   76 [chromium] › tests\e2e\admin\07-resources.spec.ts:35:5 › 资源库 › 列表页面 › 搜索功能 (2.7s)
  x   77 [chromium] › tests\e2e\admin\07-resources.spec.ts:53:5 › 资源库 › 列表页面 › 筛选功能 - 按类型 (1.6s)
  x   78 [chromium] › tests\e2e\admin\07-resources.spec.ts:71:5 › 资源库 › 列表页面 › 分页功能 (6.8s)
  x   79 [chromium] › tests\e2e\admin\07-resources.spec.ts:81:5 › 资源库 › 创建资源 › 点击创建按钮 (31.1s)
  x   80 [chromium] › tests\e2e\admin\07-resources.spec.ts:102:5 › 资源库 › 创建资源 › 填写资源信息 (31.1s)
  x   81 [chromium] › tests\e2e\admin\07-resources.spec.ts:155:5 › 资源库 › 创建资源 › 上传资源文件 (31.1s)
  x   82 [chromium] › tests\e2e\admin\07-resources.spec.ts:181:5 › 资源库 › 创建资源 › 保存资源 (31.1s)
  ok  83 [chromium] › tests\e2e\admin\07-resources.spec.ts:252:5 › 资源库 › 编辑资源 › 点击编辑按钮 (1.7s)
  ok  84 [chromium] › tests\e2e\admin\07-resources.spec.ts:271:5 › 资源库 › 编辑资源 › 修改资源信息 (1.5s)
  ok  85 [chromium] › tests\e2e\admin\07-resources.spec.ts:298:5 › 资源库 › 删除资源 › 点击删除按钮 (1.3s)
  ok  86 [chromium] › tests\e2e\admin\07-resources.spec.ts:308:5 › 资源库 › 删除资源 › 确认删除弹窗 (1.4s)
  ok  87 [chromium] › tests\e2e\admin\08-settings.spec.ts:16:5 › 系统设置 › 基本设置 › 访问系统设置页面 (1.3s)
  x   88 [chromium] › tests\e2e\admin\08-settings.spec.ts:21:5 › 系统设置 › 基本设置 › 查看基本设置表单 (6.5s)
  ok  89 [chromium] › tests\e2e\admin\08-settings.spec.ts:34:5 › 系统设置 › 基本设置 › 修改系统名称 (1.9s)
  ok  90 [chromium] › tests\e2e\admin\08-settings.spec.ts:46:5 › 系统设置 › 基本设置 › 修改联系电话 (1.6s)
  ok  91 [chromium] › tests\e2e\admin\08-settings.spec.ts:57:5 › 系统设置 › 基本设置 › 修改联系邮箱 (1.6s)
  x   92 [chromium] › tests\e2e\admin\08-settings.spec.ts:68:5 › 系统设置 › 基本设置 › 上传系统 Logo (6.8s)
  ok  93 [chromium] › tests\e2e\admin\08-settings.spec.ts:77:5 › 系统设置 › 基本设置 › 保存基本设置 (4.1s)
  x   94 [chromium] › tests\e2e\admin\08-settings.spec.ts:111:5 › 系统设置 › 安全设置 › 查看安全设置 (7.5s)
  ok  95 [chromium] › tests\e2e\admin\08-settings.spec.ts:124:5 › 系统设置 › 安全设置 › 修改密码强度策略 (2.7s)
  ok  96 [chromium] › tests\e2e\admin\08-settings.spec.ts:137:5 › 系统设置 › 安全设置 › 修改最大登录尝试次数 (1.9s)
  ok  97 [chromium] › tests\e2e\admin\08-settings.spec.ts:150:5 › 系统设置 › 安全设置 › 修改 Token 过期时间 (1.9s)
  ok  98 [chromium] › tests\e2e\admin\08-settings.spec.ts:164:5 › 系统设置 › 安全设置 › 保存安全设置 (4.0s)
  ok  99 [chromium] › tests\e2e\admin\08-settings.spec.ts:188:5 › 系统设置 › 通知设置 › 查看通知设置 (2.1s)
  ok 100 [chromium] › tests\e2e\admin\08-settings.spec.ts:202:5 › 系统设置 › 通知设置 › 启用/禁用邮件通知 (2.3s)
  ok 101 [chromium] › tests\e2e\admin\08-settings.spec.ts:215:5 › 系统设置 › 通知设置 › 配置 SMTP 服务器 (1.9s)
  ok 102 [chromium] › tests\e2e\admin\08-settings.spec.ts:240:5 › 系统设置 › 通知设置 › 启用/禁用短信通知 (1.9s)
  ok 103 [chromium] › tests\e2e\admin\08-settings.spec.ts:253:5 › 系统设置 › 通知设置 › 保存通知设置 (4.2s)
  ok 104 [chromium] › tests\e2e\admin\08-settings.spec.ts:277:5 › 系统设置 › 存储设置 › 查看存储设置 (1.9s)
  ok 105 [chromium] › tests\e2e\admin\08-settings.spec.ts:289:5 › 系统设置 › 存储设置 › 选择存储类型 (1.8s)
  ok 106 [chromium] › tests\e2e\admin\08-settings.spec.ts:308:5 › 系统设置 › 存储设置 › 设置最大文件大小 (1.9s)
  ok 107 [chromium] › tests\e2e\admin\08-settings.spec.ts:321:5 › 系统设置 › 存储设置 › 设置允许的文件类型 (1.9s)
  ok 108 [chromium] › tests\e2e\admin\08-settings.spec.ts:334:5 › 系统设置 › 存储设置 › 保存存储设置 (3.8s)
  x  109 [chromium] › tests\e2e\admin\99-logout.spec.ts:10:3 › 退出登录 › 点击退出登录 (1.2s)
  x  110 [chromium] › tests\e2e\admin\99-logout.spec.ts:36:3 › 退出登录 › 验证跳转回登录页 (1.2s)
  x  111 [chromium] › tests\e2e\admin\99-logout.spec.ts:65:3 › 退出登录 › 验证 token 已清除 (1.5s)
  x  112 [chromium] › tests\e2e\admin\99-logout.spec.ts:101:3 › 退出登录 › 退出后无法访问管理页面 (1.3s)
步骤 1: 登录系统
✓ 登录成功
步骤 2: 验证数据看板
  x  113 [chromium] › tests\e2e\admin\admin-full-flow.spec.ts:13:3 › 超管端完整流程集成测试 › 超管端全功能流程测试 (11.5s)


  1) [chromium] › tests\e2e\admin\02-dashboard.spec.ts:14:3 › 数据看板 › 验证统计卡片显示 ──────────────────────

    TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.
    Call log:
    [2m  - waiting for locator('.ant-statistic, [class*="statistic"]') to be visible[22m


      14 |   test('验证统计卡片显示', async ({ page }) => {
      15 |     // 等待统计卡片加载
    > 16 |     await page.waitForSelector('.ant-statistic, [class*="statistic"]', { timeout: 10000 });
         |                ^
      17 |
      18 |     // 验证租户数卡片
      19 |     const tenantCard = page.getByText(/租户数|租户总数|机构数/).first();
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\02-dashboard.spec.ts:16:16

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证统计卡片显示-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证统计卡片显示-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-02-dashboard-数据看板-验证统计卡片显示-chromium\error-context.md

  2) [chromium] › tests\e2e\admin\02-dashboard.spec.ts:35:3 › 数据看板 › 验证趋势图加载 ───────────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('[class*="trend"], [class*="chart"], canvas').first()
    Expected: visible
    Timeout: 10000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 10000ms[22m
    [2m  - waiting for locator('[class*="trend"], [class*="chart"], canvas').first()[22m


      36 |     // 等待图表容器加载
      37 |     const chartContainer = page.locator('[class*="trend"], [class*="chart"], canvas').first();
    > 38 |     await expect(chartContainer).toBeVisible({ timeout: 10000 });
         |                                  ^
      39 |   });
      40 |
      41 |   test('验证活跃租户 TOP5 列表', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\02-dashboard.spec.ts:38:34

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证趋势图加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证趋势图加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-02-dashboard-数据看板-验证趋势图加载-chromium\error-context.md

  3) [chromium] › tests\e2e\admin\02-dashboard.spec.ts:41:3 › 数据看板 › 验证活跃租户 TOP5 列表 ────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText(/活跃租户|活跃机构|TOP5/)
    Expected: visible
    Error: strict mode violation: getByText(/活跃租户|活跃机构|TOP5/) resolved to 2 elements:
        1) <div class="ant-card-head-title">活跃租户 TOP5</div> aka getByText('活跃租户 TOP5')
        2) <div class="ant-card-head-title">热门课程包 TOP5</div> aka getByText('热门课程包 TOP5')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 10000ms[22m
    [2m  - waiting for getByText(/活跃租户|活跃机构|TOP5/)[22m


      42 |     // 查找活跃租户列表区域
      43 |     const activeTenantsSection = page.getByText(/活跃租户|活跃机构|TOP5/);
    > 44 |     await expect(activeTenantsSection).toBeVisible({ timeout: 10000 });
         |                                        ^
      45 |
      46 |     // 验证列表中有数据行
      47 |     const listItems = page.locator('[class*="list-item"], [class*="table-row"]').first();
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\02-dashboard.spec.ts:44:40

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证活跃租户-TOP5-列表-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证活跃租户-TOP5-列表-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-02-dashboard-数据看板-验证活跃租户-TOP5-列表-chromium\error-context.md

  4) [chromium] › tests\e2e\admin\02-dashboard.spec.ts:51:3 › 数据看板 › 验证热门课程包 TOP5 列表 ───────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText(/热门课程|热门课程包|TOP5/)
    Expected: visible
    Error: strict mode violation: getByText(/热门课程|热门课程包|TOP5/) resolved to 2 elements:
        1) <div class="ant-card-head-title">活跃租户 TOP5</div> aka getByText('活跃租户 TOP5')
        2) <div class="ant-card-head-title">热门课程包 TOP5</div> aka getByText('热门课程包 TOP5')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 10000ms[22m
    [2m  - waiting for getByText(/热门课程|热门课程包|TOP5/)[22m


      52 |     // 查找热门课程包列表区域
      53 |     const popularCoursesSection = page.getByText(/热门课程|热门课程包|TOP5/);
    > 54 |     await expect(popularCoursesSection).toBeVisible({ timeout: 10000 });
         |                                         ^
      55 |
      56 |     // 验证列表中有数据行
      57 |     const listItems = page.locator('[class*="list-item"], [class*="table-row"]').first();
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\02-dashboard.spec.ts:54:41

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证热门课程包-TOP5-列表-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-02-dashboard-数据看板-验证热门课程包-TOP5-列表-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-02-dashboard-数据看板-验证热门课程包-TOP5-列表-chromium\error-context.md

  5) [chromium] › tests\e2e\admin\03-courses.spec.ts:22:5 › 课程包管理 › 列表页面 › 验证列表加载 ──────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: '课程包名称关联绘本状态版本数据统计最近更新操作暂无数据' }).nth(5)
        2) <table>…</table> aka getByText('课程包名称关联绘本状态版本数据统计最近更新操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      26 |       // 验证表格存在
      27 |       const table = page.locator('table, .ant-table');
    > 28 |       await expect(table).toBeVisible();
         |                           ^
      29 |
      30 |       // 验证新建按钮存在
      31 |       const createButton = page.getByText(/新建课程包|创建课程包/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:28:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-验证列表加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-验证列表加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-列表页面-验证列表加载-chromium\error-context.md

  6) [chromium] › tests\e2e\admin\03-courses.spec.ts:35:5 › 课程包管理 › 列表页面 › 搜索功能 ────────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: '课程包名称关联绘本状态版本数据统计最近更新操作暂无数据' }).nth(5)
        2) <table>…</table> aka getByText('课程包名称关联绘本状态版本数据统计最近更新操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      46 |       // 验证搜索结果
      47 |       const table = page.locator('table, .ant-table');
    > 48 |       await expect(table).toBeVisible();
         |                           ^
      49 |     });
      50 |
      51 |     test('筛选功能 - 按状态', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:48:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-搜索功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-搜索功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-列表页面-搜索功能-chromium\error-context.md

  7) [chromium] › tests\e2e\admin\03-courses.spec.ts:51:5 › 课程包管理 › 列表页面 › 筛选功能 - 按状态 ──────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByPlaceholder('状态')[22m


      54 |       // 选择状态筛选
      55 |       const statusSelect = page.getByPlaceholder('状态');
    > 56 |       await statusSelect.click();
         |                          ^
      57 |       await page.getByText('已发布').click();
      58 |
      59 |       // 等待筛选结果
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:56:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-筛选功能---按状态-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-筛选功能---按状态-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-列表页面-筛选功能---按状态-chromium\error-context.md

  8) [chromium] › tests\e2e\admin\03-courses.spec.ts:67:5 › 课程包管理 › 列表页面 › 分页功能 ────────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('.ant-pagination')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('.ant-pagination')[22m


      70 |       // 验证分页控件存在
      71 |       const pagination = page.locator('.ant-pagination');
    > 72 |       await expect(pagination).toBeVisible();
         |                                ^
      73 |     });
      74 |   });
      75 |
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:72:32

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-分页功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-列表页面-分页功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-列表页面-分页功能-chromium\error-context.md

  9) [chromium] › tests\e2e\admin\03-courses.spec.ts:87:5 › 课程包管理 › 创建课程包 › 步骤 1: 填写基本信息 ───────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText(/课程介绍|课程目标/)
    Expected: visible
    Error: strict mode violation: getByText(/课程介绍|课程目标/) resolved to 2 elements:
        1) <div class="ant-steps-item-title">…</div> aka getByRole('button', { name: '课程介绍' })
        2) <span class="title" data-v-6504680a="">课程介绍</span> aka locator('span').filter({ hasText: '课程介绍' })

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for getByText(/课程介绍|课程目标/)[22m


      106 |
      107 |       // 验证进入步骤 2
    > 108 |       await expect(page.getByText(/课程介绍|课程目标/)).toBeVisible({ timeout: 5000 });
          |                                                 ^
      109 |     });
      110 |
      111 |     test('步骤 2: 课程介绍', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:108:49

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-1-填写基本信息-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-1-填写基本信息-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-创建课程包-步骤-1-填写基本信息-chromium\error-context.md

  10) [chromium] › tests\e2e\admin\03-courses.spec.ts:111:5 › 课程包管理 › 创建课程包 › 步骤 2: 课程介绍 ───────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText(/排课参考/)
    Expected: visible
    Error: strict mode violation: getByText(/排课参考/) resolved to 3 elements:
        1) <div class="ant-steps-item-title">…</div> aka getByRole('button', { name: '排课参考' })
        2) <div class="ant-alert-message">排课参考说明</div> aka getByText('排课参考说明')
        3) <div class="ant-alert-description"> 此表格为排课参考，帮助教师了解课程安排建议。可根据实际情况调整。 </div> aka getByText('此表格为排课参考，帮助教师了解课程安排建议。可根据实际情况调整。')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for getByText(/排课参考/)[22m


      135 |
      136 |       // 验证进入步骤 3
    > 137 |       await expect(page.getByText(/排课参考/)).toBeVisible({ timeout: 5000 });
          |                                            ^
      138 |     });
      139 |
      140 |     test('步骤 3: 排课参考', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:137:44

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-2-课程介绍-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-2-课程介绍-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-创建课程包-步骤-2-课程介绍-chromium\error-context.md

  11) [chromium] › tests\e2e\admin\03-courses.spec.ts:140:5 › 课程包管理 › 创建课程包 › 步骤 3: 排课参考 ───────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText(/导入课/)
    Expected: visible
    Error: strict mode violation: getByText(/导入课/) resolved to 6 elements:
        1) <div class="ant-steps-item-title">…</div> aka getByRole('button', { name: '导入课' })
        2) <span class="title" data-v-306ce39a="">导入课配置</span> aka getByText('导入课配置')
        3) <div class="ant-alert-message">导入课说明</div> aka getByText('导入课说明')
        4) <div class="ant-alert-description"> 导入课用于激发幼儿兴趣，引入课程主题。建议时长5-15分钟，重点在于吸引注意力、建立学习期待。 </div> aka getByText('导入课用于激发幼儿兴趣，引入课程主题。建议时长5-15')
        5) <p class="ant-empty-description">暂未配置导入课</p> aka getByText('暂未配置导入课')
        6) <span>创建导入课</span> aka getByText('创建导入课')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for getByText(/导入课/)[22m


      165 |
      166 |       // 验证进入步骤 4
    > 167 |       await expect(page.getByText(/导入课/)).toBeVisible({ timeout: 5000 });
          |                                           ^
      168 |     });
      169 |   });
      170 |
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\03-courses.spec.ts:167:43

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-3-排课参考-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-03-courses-课程包管理-创建课程包-步骤-3-排课参考-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-03-courses-课程包管理-创建课程包-步骤-3-排课参考-chromium\error-context.md

  12) [chromium] › tests\e2e\admin\04-packages.spec.ts:22:5 › 套餐管理 › 列表页面 › 验证列表加载 ─────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-empty">…</div> aka locator('div').filter({ hasText: /^ID套餐名称价格适用年级课程数使用学校数状态操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('ID套餐名称价格适用年级课程数使用学校数状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      26 |       // 验证表格存在
      27 |       const table = page.locator('table, .ant-table');
    > 28 |       await expect(table).toBeVisible();
         |                           ^
      29 |
      30 |       // 验证新建按钮存在
      31 |       const createButton = page.getByText(/新建套餐 | 创建套餐/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\04-packages.spec.ts:28:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-04-packages-套餐管理-列表页面-验证列表加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-04-packages-套餐管理-列表页面-验证列表加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-04-packages-套餐管理-列表页面-验证列表加载-chromium\error-context.md

  13) [chromium] › tests\e2e\admin\04-packages.spec.ts:45:5 › 套餐管理 › 创建套餐 › 点击创建按钮 ─────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建套餐 | 创建套餐/)[22m


      46 |       // 点击新建套餐按钮
      47 |       const createButton = page.getByText(/新建套餐 | 创建套餐/);
    > 48 |       await createButton.click();
         |                          ^
      49 |
      50 |       // 验证跳转到创建页面
      51 |       await page.waitForURL(/\/admin\/packages\/create|\/admin\/packages\/new/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\04-packages.spec.ts:48:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-04-packages-套餐管理-创建套餐-点击创建按钮-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-04-packages-套餐管理-创建套餐-点击创建按钮-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-04-packages-套餐管理-创建套餐-点击创建按钮-chromium\error-context.md

  14) [chromium] › tests\e2e\admin\05-themes.spec.ts:22:5 › 主题字典 › 列表页面 › 验证列表加载 ───────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-empty">…</div> aka locator('div').filter({ hasText: /^排序主题名称描述状态操作暂无数据$/ }).nth(4)
        2) <table>…</table> aka getByText('排序主题名称描述状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      26 |       // 验证表格存在
      27 |       const table = page.locator('table, .ant-table');
    > 28 |       await expect(table).toBeVisible();
         |                           ^
      29 |
      30 |       // 验证新建按钮存在
      31 |       const createButton = page.getByText(/新建主题 | 创建主题/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\05-themes.spec.ts:28:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-05-themes-主题字典-列表页面-验证列表加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-05-themes-主题字典-列表页面-验证列表加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-05-themes-主题字典-列表页面-验证列表加载-chromium\error-context.md

  15) [chromium] › tests\e2e\admin\05-themes.spec.ts:45:5 › 主题字典 › 创建主题 › 点击创建按钮 ───────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建主题 | 创建主题/)[22m


      46 |       // 点击新建主题按钮
      47 |       const createButton = page.getByText(/新建主题 | 创建主题/);
    > 48 |       await createButton.click();
         |                          ^
      49 |
      50 |       // 验证跳转到创建页面
      51 |       await page.waitForURL(/\/admin\/themes\/create|\/admin\/themes\/new/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\05-themes.spec.ts:48:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-05-themes-主题字典-创建主题-点击创建按钮-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-05-themes-主题字典-创建主题-点击创建按钮-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-05-themes-主题字典-创建主题-点击创建按钮-chromium\error-context.md

  16) [chromium] › tests\e2e\admin\06-tenants.spec.ts:22:5 › 租户管理 › 列表页面 › 验证列表加载 ──────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      26 |       // 验证表格存在
      27 |       const table = page.locator('table, .ant-table');
    > 28 |       await expect(table).toBeVisible();
         |                           ^
      29 |
      30 |       // 验证添加租户按钮存在
      31 |       const addButton = page.getByText(/添加租户 | 新建租户/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:28:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-验证列表加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-验证列表加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-列表页面-验证列表加载-chromium\error-context.md

  17) [chromium] › tests\e2e\admin\06-tenants.spec.ts:35:5 › 租户管理 › 列表页面 › 搜索功能 ────────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      48 |       // 验证表格仍然存在
      49 |       const table = page.locator('table, .ant-table');
    > 50 |       await expect(table).toBeVisible();
         |                           ^
      51 |     });
      52 |
      53 |     test('筛选功能 - 按状态', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:50:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-搜索功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-搜索功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-列表页面-搜索功能-chromium\error-context.md

  18) [chromium] › tests\e2e\admin\06-tenants.spec.ts:53:5 › 租户管理 › 列表页面 › 筛选功能 - 按状态 ──────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      66 |       // 验证表格仍然存在
      67 |       const table = page.locator('table, .ant-table');
    > 68 |       await expect(table).toBeVisible();
         |                           ^
      69 |     });
      70 |
      71 |     test('筛选功能 - 按套餐', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:68:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按状态-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按状态-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按状态-chromium\error-context.md

  19) [chromium] › tests\e2e\admin\06-tenants.spec.ts:71:5 › 租户管理 › 列表页面 › 筛选功能 - 按套餐 ──────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('学校名称登录账号联系人联系电话套餐配额使用有效期状态操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      84 |       // 验证表格仍然存在
      85 |       const table = page.locator('table, .ant-table');
    > 86 |       await expect(table).toBeVisible();
         |                           ^
      87 |     });
      88 |
      89 |     test('分页功能', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:86:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按套餐-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按套餐-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-列表页面-筛选功能---按套餐-chromium\error-context.md

  20) [chromium] › tests\e2e\admin\06-tenants.spec.ts:89:5 › 租户管理 › 列表页面 › 分页功能 ────────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('.ant-pagination')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('.ant-pagination')[22m


      92 |       // 验证分页控件存在
      93 |       const pagination = page.locator('.ant-pagination');
    > 94 |       await expect(pagination).toBeVisible();
         |                                ^
      95 |     });
      96 |   });
      97 |
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:94:32

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-分页功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-列表页面-分页功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-列表页面-分页功能-chromium\error-context.md

  21) [chromium] › tests\e2e\admin\06-tenants.spec.ts:99:5 › 租户管理 › 创建租户 › 点击添加租户按钮 ────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      102 |       // 点击添加租户按钮
      103 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 104 |       await addButton.click();
          |                       ^
      105 |
      106 |       // 等待弹窗显示
      107 |       const modal = page.locator('.ant-modal');
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:104:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-点击添加租户按钮-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-点击添加租户按钮-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-点击添加租户按钮-chromium\error-context.md

  22) [chromium] › tests\e2e\admin\06-tenants.spec.ts:112:5 › 租户管理 › 创建租户 › 填写基本信息 ─────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      115 |       // 点击添加租户按钮
      116 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 117 |       await addButton.click();
          |                       ^
      118 |       await page.waitForTimeout(500);
      119 |
      120 |       // 填写学校名称
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:117:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-填写基本信息-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-填写基本信息-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-填写基本信息-chromium\error-context.md

  23) [chromium] › tests\e2e\admin\06-tenants.spec.ts:137:5 › 租户管理 › 创建租户 › 选择套餐类型 ─────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      140 |       // 点击添加租户按钮
      141 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 142 |       await addButton.click();
          |                       ^
      143 |       await page.waitForTimeout(500);
      144 |
      145 |       // 选择套餐类型
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:142:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-选择套餐类型-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-选择套餐类型-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-选择套餐类型-chromium\error-context.md

  24) [chromium] › tests\e2e\admin\06-tenants.spec.ts:153:5 › 租户管理 › 创建租户 › 设置配额 ───────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      156 |       // 点击添加租户按钮
      157 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 158 |       await addButton.click();
          |                       ^
      159 |       await page.waitForTimeout(500);
      160 |
      161 |       // 设置教师配额
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:158:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-设置配额-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-设置配额-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-设置配额-chromium\error-context.md

  25) [chromium] › tests\e2e\admin\06-tenants.spec.ts:174:5 › 租户管理 › 创建租户 › 设置有效期 ──────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      177 |       // 点击添加租户按钮
      178 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 179 |       await addButton.click();
          |                       ^
      180 |       await page.waitForTimeout(500);
      181 |
      182 |       // 验证日期选择器存在
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:179:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-设置有效期-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-设置有效期-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-设置有效期-chromium\error-context.md

  26) [chromium] › tests\e2e\admin\06-tenants.spec.ts:187:5 › 租户管理 › 创建租户 › 保存租户 ───────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/添加租户 | 新建租户/)[22m


      190 |       // 点击添加租户按钮
      191 |       const addButton = page.getByText(/添加租户 | 新建租户/);
    > 192 |       await addButton.click();
          |                       ^
      193 |       await page.waitForTimeout(500);
      194 |
      195 |       // 填写学校名称
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\06-tenants.spec.ts:192:23

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-保存租户-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-06-tenants-租户管理-创建租户-保存租户-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-06-tenants-租户管理-创建租户-保存租户-chromium\error-context.md

  27) [chromium] › tests\e2e\admin\07-resources.spec.ts:22:5 › 资源库 › 列表页面 › 验证列表加载 ─────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^资源所属资源库标签上传时间操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('资源所属资源库标签上传时间操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      26 |       // 验证表格存在
      27 |       const table = page.locator('table, .ant-table');
    > 28 |       await expect(table).toBeVisible();
         |                           ^
      29 |
      30 |       // 验证新建按钮存在
      31 |       const createButton = page.getByText(/新建资源 | 创建资源 | 上传资源/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:28:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-验证列表加载-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-验证列表加载-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-列表页面-验证列表加载-chromium\error-context.md

  28) [chromium] › tests\e2e\admin\07-resources.spec.ts:35:5 › 资源库 › 列表页面 › 搜索功能 ───────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^资源所属资源库标签上传时间操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('资源所属资源库标签上传时间操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      48 |       // 验证表格仍然存在
      49 |       const table = page.locator('table, .ant-table');
    > 50 |       await expect(table).toBeVisible();
         |                           ^
      51 |     });
      52 |
      53 |     test('筛选功能 - 按类型', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:50:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-搜索功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-搜索功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-列表页面-搜索功能-chromium\error-context.md

  29) [chromium] › tests\e2e\admin\07-resources.spec.ts:53:5 › 资源库 › 列表页面 › 筛选功能 - 按类型 ─────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('table, .ant-table')
    Expected: visible
    Error: strict mode violation: locator('table, .ant-table') resolved to 2 elements:
        1) <div class="ant-table ant-table-has-fix-right ant-table-empty">…</div> aka locator('div').filter({ hasText: /^资源所属资源库标签上传时间操作暂无数据$/ }).nth(3)
        2) <table>…</table> aka getByText('资源所属资源库标签上传时间操作暂无数据')

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('table, .ant-table')[22m


      66 |       // 验证表格仍然存在
      67 |       const table = page.locator('table, .ant-table');
    > 68 |       await expect(table).toBeVisible();
         |                           ^
      69 |     });
      70 |
      71 |     test('分页功能', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:68:27

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-筛选功能---按类型-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-筛选功能---按类型-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-列表页面-筛选功能---按类型-chromium\error-context.md

  30) [chromium] › tests\e2e\admin\07-resources.spec.ts:71:5 › 资源库 › 列表页面 › 分页功能 ───────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('.ant-pagination')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('.ant-pagination')[22m


      74 |       // 验证分页控件存在
      75 |       const pagination = page.locator('.ant-pagination');
    > 76 |       await expect(pagination).toBeVisible();
         |                                ^
      77 |     });
      78 |   });
      79 |
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:76:32

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-分页功能-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-列表页面-分页功能-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-列表页面-分页功能-chromium\error-context.md

  31) [chromium] › tests\e2e\admin\07-resources.spec.ts:81:5 › 资源库 › 创建资源 › 点击创建按钮 ─────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建资源 | 创建资源 | 上传资源/)[22m


      84 |       // 点击新建资源按钮
      85 |       const createButton = page.getByText(/新建资源 | 创建资源 | 上传资源/);
    > 86 |       await createButton.click();
         |                          ^
      87 |
      88 |       // 验证跳转到创建页面或弹窗显示
      89 |       await page.waitForTimeout(1000);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:86:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-点击创建按钮-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-点击创建按钮-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-创建资源-点击创建按钮-chromium\error-context.md

  32) [chromium] › tests\e2e\admin\07-resources.spec.ts:102:5 › 资源库 › 创建资源 › 填写资源信息 ────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建资源 | 创建资源 | 上传资源/)[22m


      105 |       // 点击新建资源按钮
      106 |       const createButton = page.getByText(/新建资源 | 创建资源 | 上传资源/);
    > 107 |       await createButton.click();
          |                          ^
      108 |       await page.waitForTimeout(500);
      109 |
      110 |       // 检查是弹窗还是新页面
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:107:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-填写资源信息-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-填写资源信息-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-创建资源-填写资源信息-chromium\error-context.md

  33) [chromium] › tests\e2e\admin\07-resources.spec.ts:155:5 › 资源库 › 创建资源 › 上传资源文件 ────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建资源 | 创建资源 | 上传资源/)[22m


      158 |       // 点击新建资源按钮
      159 |       const createButton = page.getByText(/新建资源 | 创建资源 | 上传资源/);
    > 160 |       await createButton.click();
          |                          ^
      161 |       await page.waitForTimeout(500);
      162 |
      163 |       // 检查是弹窗还是新页面
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:160:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-上传资源文件-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-上传资源文件-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-创建资源-上传资源文件-chromium\error-context.md

  34) [chromium] › tests\e2e\admin\07-resources.spec.ts:181:5 › 资源库 › 创建资源 › 保存资源 ──────────────────

    [31mTest timeout of 30000ms exceeded.[39m

    Error: locator.click: Test timeout of 30000ms exceeded.
    Call log:
    [2m  - waiting for getByText(/新建资源 | 创建资源 | 上传资源/)[22m


      184 |       // 点击新建资源按钮
      185 |       const createButton = page.getByText(/新建资源 | 创建资源 | 上传资源/);
    > 186 |       await createButton.click();
          |                          ^
      187 |       await page.waitForTimeout(500);
      188 |
      189 |       // 检查是弹窗还是新页面
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\07-resources.spec.ts:186:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-保存资源-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-07-resources-资源库-创建资源-保存资源-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-07-resources-资源库-创建资源-保存资源-chromium\error-context.md

  35) [chromium] › tests\e2e\admin\08-settings.spec.ts:21:5 › 系统设置 › 基本设置 › 查看基本设置表单 ───────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText('系统 LOGO')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for getByText('系统 LOGO')[22m


      26 |       // 验证表单字段存在
      27 |       await expect(page.getByText('系统名称')).toBeVisible();
    > 28 |       await expect(page.getByText('系统 LOGO')).toBeVisible();
         |                                               ^
      29 |       await expect(page.getByText('系统简介')).toBeVisible();
      30 |       await expect(page.getByText('联系电话')).toBeVisible();
      31 |       await expect(page.getByText('联系邮箱')).toBeVisible();
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\08-settings.spec.ts:28:47

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-基本设置-查看基本设置表单-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-基本设置-查看基本设置表单-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-08-settings-系统设置-基本设置-查看基本设置表单-chromium\error-context.md

  36) [chromium] › tests\e2e\admin\08-settings.spec.ts:68:5 › 系统设置 › 基本设置 › 上传系统 Logo ──────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: locator('.ant-upload-picture-card')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for locator('.ant-upload-picture-card')[22m


      72 |       // 验证上传组件存在
      73 |       const uploadButton = page.locator('.ant-upload-picture-card');
    > 74 |       await expect(uploadButton).toBeVisible();
         |                                  ^
      75 |     });
      76 |
      77 |     test('保存基本设置', async ({ page }) => {
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\08-settings.spec.ts:74:34

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-基本设置-上传系统-Logo-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-基本设置-上传系统-Logo-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-08-settings-系统设置-基本设置-上传系统-Logo-chromium\error-context.md

  37) [chromium] › tests\e2e\admin\08-settings.spec.ts:111:5 › 系统设置 › 安全设置 › 查看安全设置 ────────────────

    Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed

    Locator: getByText('Token 有效期')
    Expected: visible
    Timeout: 5000ms
    Error: element(s) not found

    Call log:
    [2m  - Expect "toBeVisible" with timeout 5000ms[22m
    [2m  - waiting for getByText('Token 有效期')[22m


      118 |       await expect(page.getByText('密码强度')).toBeVisible();
      119 |       await expect(page.getByText('登录失败限制')).toBeVisible();
    > 120 |       await expect(page.getByText('Token 有效期')).toBeVisible();
          |                                                 ^
      121 |       await expect(page.getByText('强制 HTTPS')).toBeVisible();
      122 |     });
      123 |
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\08-settings.spec.ts:120:49

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-安全设置-查看安全设置-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-08-settings-系统设置-安全设置-查看安全设置-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-08-settings-系统设置-安全设置-查看安全设置-chromium\error-context.md

  38) [chromium] › tests\e2e\admin\99-logout.spec.ts:10:3 › 退出登录 › 点击退出登录 ──────────────────────────

    Error: locator.isVisible: Error: strict mode violation: locator('.ant-dropdown-trigger').or(locator('[class*="user"]')) resolved to 5 elements:
        1) <div data-v-5c897447="" class="ant-space css-dev-only-do-not-override-1p3hq3p ant-space-horizontal ant-space-align-center user-info ant-dropdown-trigger">…</div> aka locator('div').filter({ hasText: 'Super Admin' }).nth(4)
        2) <span data-v-5c897447="" class="user-avatar ant-avatar ant-avatar-circle ant-avatar-icon css-dev-only-do-not-override-1p3hq3p">…</span> aka locator('.user-avatar')
        3) <span role="img" aria-label="user" data-v-5c897447="" class="anticon anticon-user">…</span> aka getByRole('img', { name: 'user' })
        4) <span class="user-name" data-v-5c897447="">Super Admin</span> aka getByText('Super Admin')
        5) <svg width="24" height="24" fill="none" data-v-6f64f81b="" stroke-width="1.5" aria-hidden="true" viewBox="0 0 24 24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="lucide lucide-users-icon lucide-users">…</svg> aka locator('.lucide.lucide-users-icon')

    Call log:
    [2m    - checking visibility of locator('.ant-dropdown-trigger').or(locator('[class*="user"]'))[22m


      19 |       // 尝试点击用户菜单后再找退出按钮
      20 |       const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
    > 21 |       if (await userMenu.isVisible()) {
         |                          ^
      22 |         await userMenu.click();
      23 |         await page.waitForTimeout(200);
      24 |         const dropdownLogout = page.getByText(/退出登录 | 退出/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\99-logout.spec.ts:21:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-点击退出登录-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-点击退出登录-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-99-logout-退出登录-点击退出登录-chromium\error-context.md

  39) [chromium] › tests\e2e\admin\99-logout.spec.ts:36:3 › 退出登录 › 验证跳转回登录页 ────────────────────────

    Error: locator.isVisible: Error: strict mode violation: locator('.ant-dropdown-trigger').or(locator('[class*="user"]')) resolved to 5 elements:
        1) <div data-v-5c897447="" class="ant-space css-dev-only-do-not-override-1p3hq3p ant-space-horizontal ant-space-align-center user-info ant-dropdown-trigger">…</div> aka locator('div').filter({ hasText: 'Super Admin' }).nth(4)
        2) <span data-v-5c897447="" class="user-avatar ant-avatar ant-avatar-circle ant-avatar-icon css-dev-only-do-not-override-1p3hq3p">…</span> aka locator('.user-avatar')
        3) <span role="img" aria-label="user" data-v-5c897447="" class="anticon anticon-user">…</span> aka getByRole('img', { name: 'user' })
        4) <span class="user-name" data-v-5c897447="">Super Admin</span> aka getByText('Super Admin')
        5) <svg width="24" height="24" fill="none" data-v-6f64f81b="" stroke-width="1.5" aria-hidden="true" viewBox="0 0 24 24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="lucide lucide-users-icon lucide-users">…</svg> aka locator('.lucide.lucide-users-icon')

    Call log:
    [2m    - checking visibility of locator('.ant-dropdown-trigger').or(locator('[class*="user"]'))[22m


      44 |     } else {
      45 |       const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
    > 46 |       if (await userMenu.isVisible()) {
         |                          ^
      47 |         await userMenu.click();
      48 |         await page.waitForTimeout(200);
      49 |         const dropdownLogout = page.getByText(/退出登录 | 退出/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\99-logout.spec.ts:46:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-验证跳转回登录页-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-验证跳转回登录页-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-99-logout-退出登录-验证跳转回登录页-chromium\error-context.md

  40) [chromium] › tests\e2e\admin\99-logout.spec.ts:65:3 › 退出登录 › 验证 token 已清除 ────────────────────

    Error: locator.isVisible: Error: strict mode violation: locator('.ant-dropdown-trigger').or(locator('[class*="user"]')) resolved to 5 elements:
        1) <div data-v-5c897447="" class="ant-space css-dev-only-do-not-override-1p3hq3p ant-space-horizontal ant-space-align-center user-info ant-dropdown-trigger">…</div> aka locator('div').filter({ hasText: 'Super Admin' }).nth(4)
        2) <span data-v-5c897447="" class="user-avatar ant-avatar ant-avatar-circle ant-avatar-icon css-dev-only-do-not-override-1p3hq3p">…</span> aka locator('.user-avatar')
        3) <span role="img" aria-label="user" data-v-5c897447="" class="anticon anticon-user">…</span> aka getByRole('img', { name: 'user' })
        4) <span class="user-name" data-v-5c897447="">Super Admin</span> aka getByText('Super Admin')
        5) <svg width="24" height="24" fill="none" data-v-6f64f81b="" stroke-width="1.5" aria-hidden="true" viewBox="0 0 24 24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="lucide lucide-users-icon lucide-users">…</svg> aka locator('.lucide.lucide-users-icon')

    Call log:
    [2m    - checking visibility of locator('.ant-dropdown-trigger').or(locator('[class*="user"]'))[22m


      77 |     } else {
      78 |       const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
    > 79 |       if (await userMenu.isVisible()) {
         |                          ^
      80 |         await userMenu.click();
      81 |         await page.waitForTimeout(200);
      82 |         const dropdownLogout = page.getByText(/退出登录 | 退出/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\99-logout.spec.ts:79:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-验证-token-已清除-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-验证-token-已清除-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-99-logout-退出登录-验证-token-已清除-chromium\error-context.md

  41) [chromium] › tests\e2e\admin\99-logout.spec.ts:101:3 › 退出登录 › 退出后无法访问管理页面 ────────────────────

    Error: locator.isVisible: Error: strict mode violation: locator('.ant-dropdown-trigger').or(locator('[class*="user"]')) resolved to 5 elements:
        1) <div data-v-5c897447="" class="ant-space css-dev-only-do-not-override-1p3hq3p ant-space-horizontal ant-space-align-center user-info ant-dropdown-trigger">…</div> aka locator('div').filter({ hasText: 'Super Admin' }).nth(4)
        2) <span data-v-5c897447="" class="user-avatar ant-avatar ant-avatar-circle ant-avatar-icon css-dev-only-do-not-override-1p3hq3p">…</span> aka locator('.user-avatar')
        3) <span role="img" aria-label="user" data-v-5c897447="" class="anticon anticon-user">…</span> aka getByRole('img', { name: 'user' })
        4) <span class="user-name" data-v-5c897447="">Super Admin</span> aka getByText('Super Admin')
        5) <svg width="24" height="24" fill="none" data-v-6f64f81b="" stroke-width="1.5" aria-hidden="true" viewBox="0 0 24 24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="lucide lucide-users-icon lucide-users">…</svg> aka locator('.lucide.lucide-users-icon')

    Call log:
    [2m    - checking visibility of locator('.ant-dropdown-trigger').or(locator('[class*="user"]'))[22m


      109 |     } else {
      110 |       const userMenu = page.locator('.ant-dropdown-trigger').or(page.locator('[class*="user"]'));
    > 111 |       if (await userMenu.isVisible()) {
          |                          ^
      112 |         await userMenu.click();
      113 |         await page.waitForTimeout(200);
      114 |         const dropdownLogout = page.getByText(/退出登录 | 退出/);
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\99-logout.spec.ts:111:26

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-退出后无法访问管理页面-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-99-logout-退出登录-退出后无法访问管理页面-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-99-logout-退出登录-退出后无法访问管理页面-chromium\error-context.md

  42) [chromium] › tests\e2e\admin\admin-full-flow.spec.ts:13:3 › 超管端完整流程集成测试 › 超管端全功能流程测试 ─────────

    TimeoutError: page.waitForSelector: Timeout 10000ms exceeded.
    Call log:
    [2m  - waiting for locator('.ant-statistic, [class*="statistic"]') to be visible[22m


      22 |
      23 |     // 验证统计卡片
    > 24 |     await page.waitForSelector('.ant-statistic, [class*="statistic"]', { timeout: 10000 });
         |                ^
      25 |     const tenantCard = page.getByText(/租户数 | 租户总数 | 机构数/).first();
      26 |     await expect(tenantCard).toBeVisible();
      27 |     console.log('✓ 数据看板验证通过');
        at F:\LesingleProject\lesingle-kindergarten-course\kindergarten_java\reading-platform-frontend\tests\e2e\admin\admin-full-flow.spec.ts:24:16

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    test-results\admin-admin-full-flow-超管端完整流程集成测试-超管端全功能流程测试-chromium\test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
    test-results\admin-admin-full-flow-超管端完整流程集成测试-超管端全功能流程测试-chromium\video.webm
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: test-results\admin-admin-full-flow-超管端完整流程集成测试-超管端全功能流程测试-chromium\error-context.md

  42 failed
    [chromium] › tests\e2e\admin\02-dashboard.spec.ts:14:3 › 数据看板 › 验证统计卡片显示 ───────────────────────
    [chromium] › tests\e2e\admin\02-dashboard.spec.ts:35:3 › 数据看板 › 验证趋势图加载 ────────────────────────
    [chromium] › tests\e2e\admin\02-dashboard.spec.ts:41:3 › 数据看板 › 验证活跃租户 TOP5 列表 ─────────────────
    [chromium] › tests\e2e\admin\02-dashboard.spec.ts:51:3 › 数据看板 › 验证热门课程包 TOP5 列表 ────────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:22:5 › 课程包管理 › 列表页面 › 验证列表加载 ───────────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:35:5 › 课程包管理 › 列表页面 › 搜索功能 ─────────────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:51:5 › 课程包管理 › 列表页面 › 筛选功能 - 按状态 ───────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:67:5 › 课程包管理 › 列表页面 › 分页功能 ─────────────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:87:5 › 课程包管理 › 创建课程包 › 步骤 1: 填写基本信息 ────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:111:5 › 课程包管理 › 创建课程包 › 步骤 2: 课程介绍 ─────────────
    [chromium] › tests\e2e\admin\03-courses.spec.ts:140:5 › 课程包管理 › 创建课程包 › 步骤 3: 排课参考 ─────────────
    [chromium] › tests\e2e\admin\04-packages.spec.ts:22:5 › 套餐管理 › 列表页面 › 验证列表加载 ───────────────────
    [chromium] › tests\e2e\admin\04-packages.spec.ts:45:5 › 套餐管理 › 创建套餐 › 点击创建按钮 ───────────────────
    [chromium] › tests\e2e\admin\05-themes.spec.ts:22:5 › 主题字典 › 列表页面 › 验证列表加载 ─────────────────────
    [chromium] › tests\e2e\admin\05-themes.spec.ts:45:5 › 主题字典 › 创建主题 › 点击创建按钮 ─────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:22:5 › 租户管理 › 列表页面 › 验证列表加载 ────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:35:5 › 租户管理 › 列表页面 › 搜索功能 ──────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:53:5 › 租户管理 › 列表页面 › 筛选功能 - 按状态 ────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:71:5 › 租户管理 › 列表页面 › 筛选功能 - 按套餐 ────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:89:5 › 租户管理 › 列表页面 › 分页功能 ──────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:99:5 › 租户管理 › 创建租户 › 点击添加租户按钮 ──────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:112:5 › 租户管理 › 创建租户 › 填写基本信息 ───────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:137:5 › 租户管理 › 创建租户 › 选择套餐类型 ───────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:153:5 › 租户管理 › 创建租户 › 设置配额 ─────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:174:5 › 租户管理 › 创建租户 › 设置有效期 ────────────────────
    [chromium] › tests\e2e\admin\06-tenants.spec.ts:187:5 › 租户管理 › 创建租户 › 保存租户 ─────────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:22:5 › 资源库 › 列表页面 › 验证列表加载 ───────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:35:5 › 资源库 › 列表页面 › 搜索功能 ─────────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:53:5 › 资源库 › 列表页面 › 筛选功能 - 按类型 ───────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:71:5 › 资源库 › 列表页面 › 分页功能 ─────────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:81:5 › 资源库 › 创建资源 › 点击创建按钮 ───────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:102:5 › 资源库 › 创建资源 › 填写资源信息 ──────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:155:5 › 资源库 › 创建资源 › 上传资源文件 ──────────────────
    [chromium] › tests\e2e\admin\07-resources.spec.ts:181:5 › 资源库 › 创建资源 › 保存资源 ────────────────────
    [chromium] › tests\e2e\admin\08-settings.spec.ts:21:5 › 系统设置 › 基本设置 › 查看基本设置表单 ─────────────────
    [chromium] › tests\e2e\admin\08-settings.spec.ts:68:5 › 系统设置 › 基本设置 › 上传系统 Logo ────────────────
    [chromium] › tests\e2e\admin\08-settings.spec.ts:111:5 › 系统设置 › 安全设置 › 查看安全设置 ──────────────────
    [chromium] › tests\e2e\admin\99-logout.spec.ts:10:3 › 退出登录 › 点击退出登录 ────────────────────────────
    [chromium] › tests\e2e\admin\99-logout.spec.ts:36:3 › 退出登录 › 验证跳转回登录页 ──────────────────────────
    [chromium] › tests\e2e\admin\99-logout.spec.ts:65:3 › 退出登录 › 验证 token 已清除 ──────────────────────
    [chromium] › tests\e2e\admin\99-logout.spec.ts:101:3 › 退出登录 › 退出后无法访问管理页面 ──────────────────────
    [chromium] › tests\e2e\admin\admin-full-flow.spec.ts:13:3 › 超管端完整流程集成测试 › 超管端全功能流程测试 ───────────
  71 passed (13.2m)
