Files
NextEdu/webtest/grade-management_v1.md
SpecialX d884c6d513
Some checks failed
CI / scheduled-backup (push) Failing after 36s
CI / backup-verify (push) Has been skipped
CI / weekly-dr-drill (push) Failing after 0s
CI / build-deploy (push) Has been cancelled
CI / security-scan (push) Has been cancelled
test: update and add E2E, integration, visual, and webapp tests
- Update E2E tests: announcements, auth, auth-business-flow, full-route-regression, grades, navigation, smoke-auth, teacher-web-test

- Update integration tests: api-ai-chat, api-onboarding-complete, api-onboarding-status, proxy-guard, integration setup

- Update visual regression tests: admin-dashboard, homepage, student-dashboard, teacher-dashboard, visual config, helpers

- Update webapp tests: admin, parent, student full tests and debug scripts

- Add new webapp tests: announcements_messages, settings_profile, debug scripts

- Add webtest directory with test plans, screenshots, and diagnostic scripts
2026-06-23 17:39:40 +08:00

14 KiB
Raw Blame History

年级管理模块 Web 功能测试报告

测试日期2026-06-22 19:32:45 模块:年级管理 (Grade Management) 版本v1 测试工具Playwright + Chromium (headless) Base URLhttp://localhost:3000 覆盖子模块admin-grades, admin-insights, management-classes, management-insights


一、测试概览

指标 数值
总测试项 22
通过 20
失败 0
警告 2
通过率 90.9%

测试覆盖

子模块 路由 权限点 admin teacher(grade_head) student parent
年级管理(admin) /admin/school/grades SCHOOL_MANAGE 完整CRUD 拒绝 拒绝 拒绝
年级洞察(admin) /admin/school/grades/insights SCHOOL_MANAGE 查看 拒绝 拒绝 拒绝
年级班级管理 /management/grade/classes GRADE_MANAGE 完整CRUD 完整CRUD 拒绝 拒绝
年级洞察(teacher) /management/grade/insights GRADE_RECORD_READ 查看 查看 拒绝 拒绝

二、各角色测试详情

角色admin

  • 登录状态: 成功

  • 警告: 控制台错误: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • 警告: 控制台错误: %o

%s Error: Teacher not found at getTeacherIdForMutations (about://React/Server/E:%5CDesktop%5CCICD%5C.next%5Cdev%5Cserver%5Cchunks%5Cssr%5Csrc_modules_2587b0bf._.js?113:5823:27) at Teacher

  • 警告: 控制台错误: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • 警告: 控制台错误: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • 警告: 控制台错误: %o

%s Error: Teacher not found at getTeacherIdForMutations (about://React/Server/E:%5CDesktop%5CCICD%5C.next%5Cdev%5Cserver%5Cchunks%5Cssr%5Csrc_modules_2587b0bf._.js?113:5823:27) at Teacher

访问权限测试

状态 子模块 路由 HTTP 最终 URL 备注
admin_grades /admin/school/grades 200 /admin/school/grades -
admin_insights /admin/school/grades/insights 200 /admin/school/grades/insights -
management_classes /management/grade/classes 200 /management/grade/classes -
management_insights /management/grade/insights 200 /management/grade/insights -

CRUD 功能测试

状态 功能 操作 详情
年级 CRUD (admin) 列表加载 列表/空状态正常显示
年级 CRUD (admin) 筛选器存在 找到筛选器select: 3, search: 1
年级 CRUD (admin) 打开创建对话框 创建对话框已打开
年级 CRUD (admin) 编辑入口存在 无数据行,跳过
年级 CRUD (admin) 删除入口存在 无数据行,跳过
年级 CRUD (admin) 洞察入口存在 无数据行,跳过
⚠️ 年级班级 CRUD (grade_head) 列表加载 未找到表格或空状态
⚠️ 年级班级 CRUD (grade_head) 打开创建对话框 异常: Locator.click: Timeout 30000ms exceeded.
Call log:
  • waiting for locator("button:has-text("New"), button:has-text("新建"), button:has-text("Create"), button:has-text("新增")").first
    • locator resolved to <button disabled data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 focus-visible:ring-4 focus-visible:outline-1 aria-invalid:focus-visible:ring-0 bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 h-9…>…
  • attempting click action 2 × waiting for element to be visible, enabled and stable
    • element is not enabled
    • retrying click action
    • waiting 20ms 2 × waiting for element to be visible, enabled and stable
      • element is not enabled
    • retrying click action
      • waiting 100ms 58 × waiting for element to be visible, enabled and stable
      • element is not enabled
    • retrying click action
      • waiting 500ms | | ⚠️ | 年级班级 CRUD (grade_head) | 编辑入口存在 | 无数据行,跳过 | | ⚠️ | 年级班级 CRUD (grade_head) | 删除入口存在 | 无数据行,跳过 |

洞察页面测试

状态 功能 操作 详情
洞察页面 (admin_insights) 页面加载 页面内容长度 421472
洞察页面 (admin_insights) 年级筛选器存在 找到年级筛选 select
⚠️ 洞察页面 (management_insights) 页面加载 页面内容长度 449687
⚠️ 洞察页面 (management_insights) 年级筛选器存在 未找到年级筛选 select

角色teacher

  • 登录状态: 成功

  • 警告: 控制台错误: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

访问权限测试

状态 子模块 路由 HTTP 最终 URL 备注
admin_grades /admin/school/grades 200 /teacher/dashboard?from=%2Fadmin%2Fschool%2Fgrades&reason=forbidden -
admin_insights /admin/school/grades/insights 200 /teacher/dashboard?from=%2Fadmin%2Fschool%2Fgrades%2Finsights&reason=forbidden -
management_classes /management/grade/classes 200 /management/grade/classes -
management_insights /management/grade/insights 200 /management/grade/insights -

CRUD 功能测试

状态 功能 操作 详情
⏭️ 年级 CRUD (admin) 跳过 teacher 无 SCHOOL_MANAGE 权限,跳过 admin 年级 CRUD 测试
年级班级 CRUD (grade_head) 列表加载 列表/空状态正常显示
年级班级 CRUD (grade_head) 打开创建对话框 创建对话框已打开
年级班级 CRUD (grade_head) 编辑入口存在 无数据行,跳过
年级班级 CRUD (grade_head) 删除入口存在 无数据行,跳过

洞察页面测试

状态 功能 操作 详情
⏭️ 洞察页面 (admin_insights) 跳过 teacher 无访问权限,跳过洞察页面测试
洞察页面 (management_insights) 页面加载 页面内容长度 450625
洞察页面 (management_insights) 年级筛选器存在 找到年级筛选 select

角色student

  • 登录状态: 成功
  • 警告: 控制台错误: ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • 警告: 控制台错误: ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • 警告: 控制台错误: ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • 警告: 控制台错误: ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • 警告: 控制台错误: ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

访问权限测试

状态 子模块 路由 HTTP 最终 URL 备注
admin_grades /admin/school/grades 200 /student/dashboard?from=%2Fadmin%2Fschool%2Fgrades&reason=forbidden -
admin_insights /admin/school/grades/insights 200 /student/dashboard?from=%2Fadmin%2Fschool%2Fgrades%2Finsights&reason=forbidden -
management_classes /management/grade/classes 200 /student/dashboard?from=%2Fmanagement%2Fgrade%2Fclasses&reason=forbidden -
management_insights /management/grade/insights 200 /student/dashboard?from=%2Fmanagement%2Fgrade%2Finsights&reason=forbidden -

CRUD 功能测试

状态 功能 操作 详情
⏭️ 年级 CRUD (admin) 跳过 student 无 SCHOOL_MANAGE 权限,跳过 admin 年级 CRUD 测试
⏭️ 年级班级 CRUD (grade_head) 跳过 student 无 GRADE_MANAGE 权限,跳过 management 班级 CRUD 测试

洞察页面测试

状态 功能 操作 详情
⏭️ 洞察页面 (admin_insights) 跳过 student 无访问权限,跳过洞察页面测试
⏭️ 洞察页面 (management_insights) 跳过 student 无访问权限,跳过洞察页面测试

角色parent

  • 登录状态: 成功

  • 警告: 控制台错误: A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

访问权限测试

状态 子模块 路由 HTTP 最终 URL 备注
admin_grades /admin/school/grades 200 /parent/dashboard?from=%2Fadmin%2Fschool%2Fgrades&reason=forbidden -
admin_insights /admin/school/grades/insights 200 /parent/dashboard?from=%2Fadmin%2Fschool%2Fgrades%2Finsights&reason=forbidden -
management_classes /management/grade/classes 200 /parent/dashboard?from=%2Fmanagement%2Fgrade%2Fclasses&reason=forbidden -
management_insights /management/grade/insights 200 /parent/dashboard?from=%2Fmanagement%2Fgrade%2Finsights&reason=forbidden -

CRUD 功能测试

状态 功能 操作 详情
⏭️ 年级 CRUD (admin) 跳过 parent 无 SCHOOL_MANAGE 权限,跳过 admin 年级 CRUD 测试
⏭️ 年级班级 CRUD (grade_head) 跳过 parent 无 GRADE_MANAGE 权限,跳过 management 班级 CRUD 测试

洞察页面测试

状态 功能 操作 详情
⏭️ 洞察页面 (admin_insights) 跳过 parent 无访问权限,跳过洞察页面测试
⏭️ 洞察页面 (management_insights) 跳过 parent 无访问权限,跳过洞察页面测试

四、控制台错误汇总

  • [admin] A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • [admin] %o

%s Error: Teacher not found at getTeacherIdForMutations (about://React/Server/E:%5CDesktop%5CCICD%5C.next%5Cdev%5Cserver%5Cchunks%5Cssr%5Csrc_modules_2587b0bf._.js?113:5823:27) at Teacher

  • [admin] A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • [admin] A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • [admin] %o

%s Error: Teacher not found at getTeacherIdForMutations (about://React/Server/E:%5CDesktop%5CCICD%5C.next%5Cdev%5Cserver%5Cchunks%5Cssr%5Csrc_modules_2587b0bf._.js?113:5823:27) at Teacher

  • [teacher] A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

  • [student] ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • [student] ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • [student] ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • [student] ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • [student] ./src/modules/settings/components/settings-view.tsx:122:9 Ecmascript file had an error 120 | } 121 |

122 | const canConfigureAi = hasPermission(Permissions.AI_CONFIGURE) | ^^^^

  • [parent] A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:

  • A server/client bran

五、测试结论

所有测试通过:年级管理模块在所有用户角色下均按预期工作。

  • admin 角色可以完整访问 /admin/school/grades年级 CRUD + 洞察)
  • teacher兼 grade_head角色可以访问 /management/grade/classes 和 /management/grade/insights
  • student / parent 角色被正确重定向到各自仪表盘(带 reason=forbidden 参数),权限隔离正常

报告自动生成于 2026-06-22 19:32:45