mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-14 17:43:04 +00:00
2.9 KiB
2.9 KiB
E2E: flake do getByLabel('Atividade relacionada') (strict mode) sob carga
Status: rascunho Atualizado em: 2026-08-11 Issue: #619 (D11) colheu; registro D12 Priority: P3 Kind: defect Depends: [] — pré-existente em main, não nasce do D11
O sintoma
tests/e2e/campaignRegisterDemand.e2e.spec.ts:38 — expect(page.getByLabel(CAMPAIGN_DEMAND_ACTIVITY_LABEL)).toBeVisible() (label Atividade relacionada) falha com strict mode violation: resolved to 2 elements, ambos botões com aria-label="Atividade relacionada: Nenhuma atividade" (o trigger do AsyncSearchCombobox).
Caracterização (colhida no D11, 2026-08-11)
- Falha em runs completos, passa isolado: 3/4 runs completos do set (dev e prod/E2E_PROD=1) falharam; o teste isolado passa sempre (dev e prod).
- Pré-existente:
git stashno worktree do D11 (código 100% main) reproduziu a falha idêntica no mesmo teste — inclusive o mesmo diretório de error-context. Não é regressão do D11. - Ambiente: máquina do pool com carga alta (compiles dev de 6–27s; asserts com budget 10s). O erro aparece como violação de strict mode em
getByLabel, que é substring-match: casam o trigger button (aria-labelAtividade relacionada: …) e um segundo nó. - Snapshot pós-falha: o form renderizado mostra um único trigger e o conteúdo do
CommandDialog(título + descrição) montado no DOM com o dialog fechado — o segundo match é transitório/estado de reconciliação, não duas instâncias estáveis do componente.
Hipóteses a investigar (sem implementação aqui)
AsyncSearchComboboxrenderizaCommandDialogcom conteúdo sempre montado:CommandInputtemaria-label={label}(o label exato, sem sufixo) — candidato natural a segundo match quando visível à a11y tree (possívelforceMount/transição do Radix/cmdk).- Mesmo nó resolvido duas vezes por caminhos de label distintos (aria-label + associação via
<label>/aria-labelledby) — validar compage.getByLabel(...).evaluateAll(n => n.length)num state aberto vs fechado. - Timing: o match duplicado existe durante a transição de abertura/fechamento do dialog ou numa re-render em rajada (2 workers + navegação pesada) — por isso só aparece em runs completos.
Direções de fix (escolher na execução)
- Spec:
getByLabel→getByRole('button', { name: /Atividade relacionada:/ })(o trigger) ou.first(); ougetByLabel(CAMPAIGN_DEMAND_ACTIVITY_LABEL, { exact: false })com alvo inequívoco. - Componente: remover redundância de labels (ex.:
aria-labeldoCommandInputsó quando aberto; ouaria-hiddendo dialog fechado). - Não alterar copy visível nem o comportamento da combobox.
Aceite
campaignRegisterDemandverde em run completo (reprodução ×3) e isolado- Sem mudança de DOM/labels no estado fechado que afete outros specs (grep
getByLabelem e2e)