Boas Práticas para Automação de Testes


Objetivo

Identificar obstáculos técnicos comuns no front-end que atrapalham a automação de testes de interface, com foco específico no site cnnbrasil.com.br como estudo de caso e base para exemplos. Também erros recorrentes cometidos por times de front-end que impactam negativamente o trabalho do QA.

Principais Obstáculos à Automação de UI

1. Falta de Identificadores Únicos e Estáveis

Problema: Elementos renderizados com classes ou IDs instáveis, auto-gerados por frameworks ou estilizações.

Exemplo real:

<div class="jsx-3456723 titulo card-vertical"></div>

Essas classes mudam entre builds.

Impacto: Dificulta a localização de elementos via seletores. Seletores baseados apenas em classes ou nth-child() são frágeis e quebram facilmente.

Soluções recomendadas:

  • Adicionar data-testid, data-qa, aria-label, ou role.
  • Usar nomes de classes sem hash ou sufixo dinâmico.

IDs únicos e descritivos para elementos interativos:

<button id="botao-carregar-noticias">Carregar mais</button>

2. Conteúdo Carregado Tardiamente ou de Forma Assíncrona

Problema: Muitos elementos da página só aparecem após requisições assíncronas, sem indicação clara de carregamento completo.

Impacto: O script de teste tenta interagir com elementos antes que estejam prontos ou visíveis.

Soluções recomendadas:

Incluir um indicador explícito de carregamento finalizado:

<div id="bloco-principal" data-status="carregado"></div>

Renderizar elementos com esqueleto visível desde o início, mesmo que vazios, e completar com dados depois.

3. Componentes Repetidos com Seletores Iguais

Problema: Diversos botões ou cards com a mesma classe ou sem um contexto para diferenciar.

Impacto: Seletores pegam elementos errados ou múltiplos de forma ambígua.

Exemplo ruim:

<button class="ler-mais">Ler mais</button> <!-- Vários iguais -->

Boas práticas:

Utilizar contexto hierárquico claro:

<article data-article-id="123">
	<button
		class="ler-mais"
		aria-label="ler mais sobre notícia 123"
	>
		Ler mais
	</button>
</article>

○ Usar atributos aria-* como alternativa acessível e testável.

4. Animações e Carrosséis Automáticos

Problema: Elementos como sliders/carrosséis mudam de posição automaticamente.

Impacto: Testes tentam interagir com um elemento que desaparece, muda de lugar ou “sai” do DOM.

Soluções:

Desativar animações no modo de teste com flag, por exemplo:

<body data-env="teste">

○ Fornecer controle manual no carrossel (pausar/play visível e testável).

5. Pop-ups e Banners Inesperados

Problema: Banners de cookie, newsletter, modal de aviso ou publicidade aparecem no carregamento e cobrem elementos.

Impacto: Botões ficam inacessíveis; cliques falham por “elemento não interativo”.

Soluções recomendadas:

  • Adicionar um data-testid="popup-cookies" e permitir que o banner seja fechado programaticamente.
  • Evitar mostrar pop-ups em ambientes de teste (condicional por ambiente).
  • Usar z-index adequado para evitar sobreposição desnecessária de elementos críticos.

6. Navegação Quebra Fluxo (Nova Aba / Nova Janela)

Problema: A navegação abre links externos ou internos em nova aba com target=”_blank”.

Impacto: Quebra o contexto do navegador de teste e dificulta verificar a próxima tela.

Solução:

  • Permitir que links sejam abertos no mesmo contexto (target="_self") em ambiente de teste.
  • Expor as URLs diretamente para navegação programática com links previsíveis e fixos.

7. Conteúdo Volátil e Não Determinístico

Problema: O conteúdo da home muda com frequência (matérias, destaques, títulos).

Impacto: Testes que validam se uma notícia ou elemento está visível falham quando o conteúdo desaparece ou muda.

Melhorias sugeridas:

  • Disponibilizar ambiente de teste com conteúdo estável.
  • Inserir conteúdos fixos via mocks ou rotas alternativas (ex: /home-teste).
  • Estruturar conteúdo por data-id que não muda.

8. Falta de Indicadores de Estado/Feedback Visual para Usuário e Testes

Problema: Ações como clicar em um botão não geram nenhum feedback visual imediato.

Impacto: Testes não sabem se a ação foi processada ou está em andamento.

Boas práticas:

Inserir indicadores de loading (aria-busy, data-loading).

Trocar texto ou ícone após clique:

<button data-loading="false">Salvar</button>

Muito importante: Além de data-testid, outras abordagens eficazes:

Atributo / TécnicaVantagem
aria-labelCompatível com leitores de tela e test frameworks
role="button", etcAumenta acessibilidade e facilita testes sem depender de CSS
data-qa ou data-testAlternativas neutras ao data-testid
id fixo e significativoFácil de localizar e sem ambiguidade (ex: id="menu-principal")
Hierarquia claraPermite usar seletores como main > nav > button de forma segura
title ou altTambém são acessíveis e suportados em validação de UI e acessibilidade

Erros Comuns de Front-End que Prejudicam o QA

1. Reutilização excessiva de nomes de classe

Impacta testes e leitura semântica.

Solução: Use escopos únicos ou data-*.

2. Falta de versionamento visível da UI

Não saber se um componente foi alterado dificulta validar regressões.

3. Atributos gerados dinamicamente sem consistência

Ex: class="component-87a12f" muda a cada build.

Sugestão: Use nomes manuais e legíveis.

4. Uso de nth-child() como único seletor viável

Extremamente frágil com qualquer alteração de DOM.

5. Dependência excessiva de textos dinâmicos

Ex: Validar botão por “Leia mais” quando o texto muda por AB test ou editoria.

6. Carregamento por scroll infinito sem fallback

Torna o conteúdo imprevisível e os testes mais lentos.

Sugestão: Fornecer paginação nos ambientes de teste.

7. Uso de iframes para renderizar partes do layout

Complica navegação e acesso via automação.

Conclusão

A criação de uma interface testável não exige esforço significativo extra. Com boas práticas no uso de seletores, atributos e controle de estado visual, é possível manter a flexibilidade do front-end e ao mesmo tempo facilitar a automação de testes UI — algo que beneficia toda a equipe e acelera a entrega contínua com confiança.