Skip to content

[e2e] live 车道首次真跑即暴露:master-detail.spec.ts 的标题定位器命中两个 h1(strict mode violation),2/4 用例必红 #3434

Description

@yinlianghui

背景:这条 lane 刚刚第一次真正跑起来

.github/workflows/live-e2e.yml 因为一处 job 级 env: 里的 runner 上下文,自 #3325 落地起就一直是 workflow 级 startup failure(0 job / 0s),从未执行过任何一个用例#3425 / PR #3432 修好该启动故障后,这条 lane 在 PR #3432 上跑出了历史第一个真实 run:

后端、控制台、登录都是好的([live-e2e] authenticated as admin@objectos.ai),action-modalscreen-flow 两条都过。失败集中在 master-detail.spec.ts 的两条,且是同一个根因,发生在 beforeEach 里。

现象

e2e/live/master-detail.spec.ts:33:

await expect(page.getByRole('heading', { name: 'New Project + Tasks' })).toBeVisible();

报:

Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: 'New Project + Tasks' })
Expected: visible
Error: strict mode violation: getByRole('heading', { name: 'New Project + Tasks' })
       resolved to 2 elements:
    1) < h1 class="text-3xl font-bold tracking-tight text-foreground" >New Project + Tasks< /h1 >
       aka getByRole('heading', { name: 'New Project + Tasks' }).first()
    2) < h1 class="text-2xl font-semibold tracking-tight" >New Project + Tasks< /h1 >
       aka locator('header').filter({ hasText: 'New Project + TasksMaster-' }).getByRole('heading')

两条受影响用例(都卡在同一个 beforeEach,因此用例主体一行未跑):

  • master-detail.spec.ts:36 — Create submits the populated parent in one atomic batch
  • master-detail.spec.ts:58 — Create with a task line includes the child op referencing the parent

需要判断的是哪一侧的问题(我没有下结论)

同一段文案被渲染成两个 h1:一个是页面级大标题(text-3xl),一个在 header 里(text-2xl)。这有两种可能,请在三方定夺时一并判断:

  1. 测试侧:页面本来就有「页面标题 + 吸顶 header 标题」两处,属预期;那么 spec 的定位器过宽,应收窄(限定 scope,或改用更稳的语义锚点)。
  2. 应用侧:同一标题被重复渲染成两个 h1 本身就是缺陷 —— 一个文档里出现两个 h1 对 a11y / 文档大纲也不健康,读屏会读到重复标题。若如此,该修的是渲染侧,spec 反而是正确的探针。

倾向 2 值得先看一眼再决定:h1 重复是无障碍层面的真问题,而不只是选择器写窄一点就能了事的测试瑕疵。

影响

该 lane 是 continue-on-error: true 的 informational 车道,不阻塞合并(workflow run 结论为 success);但 PR checks 列表里 Live E2E (informational) 这一格会显示 failure。也就是说 #3425 消灭的是「假红」(startup failure),这条留下的是「真红」—— 有 Playwright 报告、截图、录像和 live-e2e-artifacts 制品可查,正是这条 lane 被设计出来要抓的东西。

复现:pnpm test:e2e:live:ci(需按 e2e/live/ci/backend.env 起真后端)。

发现于 #3425 的修复验证过程(PR #3432),按 Prime Directive #10 独立立单、不夹带修复。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions