Ir para o conteúdo principal
Voltar aos artigos

Selenium: espere pelo resultado da ação, não pela passagem do tempo

Esperas explícitas e objetos de componentes tornam a automação mais verificável. O contrato precisa incluir mudanças de interface e falhas.

·3 min de leitura·2 visualizações

Um tutorial do Real Python usa um tocador de músicas por linha de comando para ensinar automação da página Discover do Bandcamp com Selenium e Firefox sem janela visível.[11] O projeto combina inspeção do DOM, interação com elementos, esperas explícitas e Page Object Model.[11] O exemplo é musical; a questão de engenharia é sincronizar um programa com uma interface que muda depois do carregamento.

Uma automação confiável precisa explicar qual estado confirma cada ação. Dormir por alguns segundos não é esse contrato. É apenas adiar a próxima tentativa.

O que muda para quem desenvolve

O texto distingue presença no DOM de disponibilidade para interação: elementos podem estar ocultos, fora da área visível ou atrás de um modal.[11] Também recomenda não misturar esperas implícitas com explícitas, porque a combinação pode alongar timeouts de forma inesperada.[11]

Minha leitura é que cada operação deve ter duas partes visíveis no código: a ação solicitada e a evidência de conclusão. Depois de carregar mais itens, por exemplo, espere uma mudança identificável na lista, não apenas a existência do botão que já estava na página.

O tutorial separa página, lista e faixas em objetos, centralizando localizadores e compartilhando WebDriver e espera.[11] Esse desenho ajuda a manter a regra de negócio distante dos detalhes de CSS e XPath. O objetivo não é produzir uma classe enorme para cada tela, mas dar nomes estáveis às operações que a aplicação precisa realizar.

Como aplicar

Comece usando manualmente o fluxo autorizado e identifique os estados relevantes: pronto para interação, operação em andamento, sucesso e falha. Escolha seletores ancorados em propriedades estáveis e registre como a ausência de um elemento será interpretada. Nem toda ausência significa erro.

Crie objetos pequenos para componentes reutilizados. A camada de aplicação deve solicitar algo como carregar resultados e receber dados ou uma falha definida, sem conhecer o caminho do elemento na árvore. Encapsule também o tratamento de modais que podem aparecer ou não.

Um experimento verificável é montar uma página de teste que apresente resultados com atrasos variáveis e um modal opcional. Compare uma rotina com pausa fixa e outra que aguarde uma condição sobre os novos resultados. Registre tempo de execução e falhas em várias rodadas, sem usar um serviço externo como laboratório involuntário.

Inclua casos de timeout, lista vazia e elemento substituído durante a atualização. Garanta o encerramento do navegador mesmo quando houver exceção. No tutorial, a aplicação gerencia abertura e encerramento com um gerenciador de contexto e limita a carga adicional de resultados.[11]

Cuidados e limites

A página do Bandcamp foi redesenhada depois de uma versão anterior do artigo, exigindo revisão dos localizadores.[11] Portanto, manutenção da interface deve entrar no custo da automação, não aparecer como surpresa após a entrega.

O texto alerta que forçar ações por JavaScript pode deixar de reproduzir o comportamento real do usuário.[11] Use esse recurso com propósito explícito, não para esconder que o teste não consegue interagir pelo caminho esperado.

O exemplo ainda aceita índices negativos, uma lacuna apontada pelo tutorial.[11] Valide estritamente entradas e limites no seu caso de uso. E não confunda estabilidade técnica com autorização: respeite o escopo de acesso, os termos do serviço e os dados que podem ser coletados. Uma automação só é útil quando seu resultado e seus limites são verificáveis.

Fonte

[11] Fonte: Real Python | Publicação: 09/10/2026 às 11:00:00

Continue lendo