Tratamento de exceções em Selenium Webdriver (tipos)

⚡ Resumo Inteligente

Tratamento de exceções em Selenium O WebDriver impede que um comando com falha seja interrompido.ping um teste completo. Java try-catch, múltiplos blocos de captura, throw, throws e, finalmente, cada um oferece ao script uma maneira diferente de se recuperar.

  • 🔘 Definição: Uma exceção é um erro que ocorre durante a execução de um programa, e uma exceção não tratada causa a falha do programa.
  • ☑️ Escopo: Selenium O WebDriver inclui mais de quarenta classes de exceção, e todas elas descendem de WebDriverException.
  • Infratores frequentes: As exceções NoSuchElementException, TimeoutException, StaleElementReferenceException e ElementNotInteractableException são as causas da maioria das falhas em situações reais.
  • 🧪 Manipulação: Um par try-catch isola um tipo de erro, vários blocos catch separam vários erros e, finalmente, o bloco try-catch sempre é executado.
  • 🛠️ Escalação: As palavras-chave `throw` e `throws` retornam uma exceção para o chamador quando o método atual não consegue resolvê-la.
  • 📊 Diagnóstico: imprimirPilhaTrace(), toString() e getMessage() reportam cada um um nível diferente de detalhes sobre a falha.

Tratamento de exceções em Selenium WebDriver com try-catch, throw e finally

O que é uma exceção?

Uma exceção é um erro que ocorre durante a execução de um programa. Enquanto um programa está em execução, a linguagem de programação gera uma exceção que deve ser tratada; caso contrário, o programa falha.

A exceção indica que, embora o evento possa ocorrer, esse tipo de evento acontece raramente. Quando um método não consegue lidar com a exceção, ela é lançada para a função que o chamou. Java, que impulsiona a maior parte Selenium Em suítes de desenvolvimento, todas as exceções do WebDriver não são verificadas, portanto o compilador nunca força você a capturá-las — uma falha não tratada só aparece em tempo de execução.

Tipos de exceções em Selenium webdriver

WebDriverException é a classe base da hierarquia, e todas as exceções abaixo dela herdam. A tabela lista todas as 41 exceções que você pode encontrar, juntamente com a condição que gera cada uma.

# Exceção Quando isso acontece
1 ElementNotVisibleException Um elemento existente no DOM tem sua característica definida como oculta.
2 Exceção ElementNotSelectableException O elemento está presente no DOM, mas não pode ser selecionado, portanto a interação é impossível.
3 NoSuchElementException O elemento não pôde ser encontrado com o localizador fornecido.
4 NoSuchFrameException O quadro O destino para o qual a mudança deve ser feita não existe.
5 NoAlertPresentException Uma mudança para um alerta Executa quando nenhum alerta é apresentado.
6 NoSuchWindowException A janela para a qual se deseja alternar não existe.
7 Exceção de referência de elemento obsoleto O elemento web está separado do atual. DOM.
8 Exceção SessionNotFoundException O WebDriver entra em ação depois que você fecha o navegador.
9 TimeoutException Um comando não foi concluído a tempo — por exemplo, o elemento procurado não foi encontrado durante o tempo de espera.
10 WebDriverException Classe base das demais exceções do WebDriver; também é lançada quando o WebDriver age logo após o fechamento do navegador.
11 Exceção de conexão fechada Há uma desconexão no driver.
12 ElementClickInterceptedException O elemento que recebe os eventos está ocultando o elemento que solicitou o clique.
13 ElementNotInteractableException O elemento está presente no DOM, mas é impossível interagir com ele.
14 Exceção de erro na resposta Algo deu errado durante a interação com o Firefox extensão ou o servidor de driver remoto.
15 ErrorHandler.UnknownServerException Usado como marcador quando o servidor retorna um erro sem um rastreamento de pilha. trace.
16 Exceção de ativação do ImeFailedException A ativação do mecanismo IME falhou.
17 Exceção ImeNotAvailableException O suporte para IME não está disponível.
18 Exceção de certificado inseguro A navegação fez com que o agente do usuário atingisse um aviso de certificado, o que pode ser causado por um certificado TLS inválido ou expirado.
19 InvalidArgumentException O argumento não pertence ao tipo esperado.
20 Exceção de domínio de cookie inválido A biscoito foi adicionado em um domínio diferente do atual. URL.
21 Exceção de coordenadas inválidas A operação de interação encontrada não é válida.
22 Exceção de estado de elemento inválido O comando não pode ser concluído porque o elemento é inválido.
23 Exceção InvalidSessionId O ID de sessão fornecido não está entre as sessões ativas, portanto não existe ou está inativo.
24 Troca de destino inválidaTargetExceção O frame ou janela para o qual se deseja alternar não existe.
25 JavascriptExceção Ocorreu um erro durante a execução. JavaScript fornecido pelo usuário.
26 JsonException A sessão é solicitada quando a sessão ainda não foi criada.
27 NoSuchAttributeException Não foi possível encontrar o atributo do elemento.
28 MoverTargetExceção OutOfBounds O destino fornecido ao método move() do ActionChains não é válido — por exemplo, está fora do documento.
29 NoSuchContextException O ContextAware, que realiza testes em dispositivos móveis, não consegue encontrar o contexto solicitado.
30 NoSuchCookieException Não foi encontrado nenhum cookie correspondente ao nome do caminho fornecido entre os cookies do documento atualmente em navegação.
31 Exceção Não Encontrado Uma subclasse de WebDriverException, lançada quando um elemento no DOM não existe.
32 Exceção RemoteDriverServerException O servidor não está respondendo porque as capacidades descritas não são adequadas.
33 Exceção de captura de tela Não é possível capturar uma tela.
34 Exceção SessionNotCreatedException Não foi possível criar uma nova sessão com sucesso.
35 Exceção não foi possível definir o cookie O driver não consegue definir um cookie.
36 Exceção de nome de tag inesperada Uma classe de suporte não recebeu um elemento web como esperado.
37 Exceção de alerta não tratada Há um alerta, mas o WebDriver não consegue executar a operação de alerta.
38 Exceção de alerta inesperado Aparece um alerta inesperado.
39 Exceção de Método Desconhecido O comando solicitado corresponde a um comando conhecido. URL mas não um método para isso específico. URL.
40 Exceção de navegador inacessível O navegador não abre ou apresentou uma falha por algum motivo.
41 Exceção de comando não suportado O WebDriver remoto não está enviando comandos válidos como esperado.

Três erros dominam a depuração diária: NoSuchElementException significa um erro. XPath ou um elemento que não foi renderizado, TimeoutException significa uma espera muito curta para um AJAX resposta, e a exceção StaleElementReferenceException segue uma dinâmico renderizar novamente.

Como lidar com exceções em Selenium

Aqui estão as construções padrão para lidar com exceções em Selenium WebDriver. Cada um é simples. JavaEntão funciona em qualquer Script WebDriver sem bibliotecas adicionais.

Etapa 1) Try-catch

Este método pode capturar exceções usando uma combinação das palavras-chave `try` e `catch`. O comando `try` marca o início do bloco, e `catch` é colocado no final do bloco `try`, onde resolve a exceção.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Etapa 2) Vários blocos catch

Existem vários tipos de exceções, e um único bloco de código pode gerar mais de uma. Vários blocos `catch` permitem que você trate cada tipo separadamente com seu próprio código. Você pode usar mais de dois blocos `catch`, e não há limite para a quantidade que você pode adicionar.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Etapa 3) Jogue

Quando você deseja gerar uma exceção, a palavra-chave `throw` a repassa para ser tratada em tempo de execução. Use `throw` quando estiver passando uma exceção adiante em vez de resolvê-la no método atual.

public static void anyFunction() throws Exception{

try {
// write your code here
} catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

Etapa 4) Múltiplas Exceções

Você pode mencionar várias exceções na cláusula throws.

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType2 e2) {
// Code to handle exception 2
}

Etapa 5) Finalmente

A palavra-chave `finally` cria um bloco abaixo do bloco `try`. Ela é executada independentemente de ter ocorrido uma exceção, o que a torna o local adequado para fechar um driver ou liberar um descritor de arquivo.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Métodos para exibir informações de exceção

Assim que uma exceção é capturada, o próprio objeto carrega os detalhes do diagnóstico. Você pode usar os seguintes métodos para exibi-los:

Forma O que relata
imprimirPilhaTrace () Imprime a pilha trace, o nome da exceção e outras descrições úteis.
para sequenciar() Retorna uma mensagem de texto descrevendo o nome e a descrição da exceção.
getMessage () Exibe a descrição da exceção separadamente.

Combine isso com uma captura de tela feita dentro do bloco catch, e uma execução com falha mostrará o que deu errado e como a página ficou.

Perguntas Frequentes

Todas as exceções do WebDriver não são verificadas, pois todas elas estendem RuntimeException até WebDriverException. Portanto, o compilador nunca exige um bloco try-catch, o que é conveniente, mas também significa que uma falha de localização não protegida só aparece quando o teste é de fato executado.

Em vez de armazenar a referência em cache, realoque o elemento imediatamente antes de interagir com ele. Um pequeno loop de repetição que ignora a exceção e busca o nó novamente lida com renderizações repetidas do React ou Vue de forma muito mais confiável do que um intervalo de espera mais longo.

Eles reduzem drasticamente o tempo de espera, mas nunca o eliminam completamente. Uma espera explícita corrige apenas problemas de sincronização — um localizador incorreto, um clique interceptado ou uma sessão fechada ainda geram uma exceção que somente um bloco `catch` pode absorver.

Selenium A versão 4 mantém a mesma hierarquia, mas os construtores de espera agora aceitam uma Duração em vez de um tempo limite inteiro, e a validação de argumentos mais rigorosa da W3C significa que uma exceção InvalidArgumentException surge para valores que Selenium 3 aceitos sem reclamação.

Motores de localização com capacidade de autorreparação track quais seletores quebram e são substituídos por uma alternativa funcional, o que remove grande parte das falhas de NoSuchElementException. Modelos semelhantes agrupam pilhas repetidas. tracé assim que um defeito genuinamente novo não fica oculto em meio a reprises inconsistentes.

O Copilot é robusto em código boilerplate — um esqueleto try-catch, uma cadeia catch na ordem correta, um bloco finally que encerra o driver. Ele não consegue prever quais exceções seu próprio aplicativo lança, portanto, revise cada bloco catch gerado.

Eles complementam isso. Um ITestListener centraliza o registro e as capturas de tela de qualquer teste que falhe, o que mantém o corpo do teste limpo. Use try-catch somente quando o script precisar continuar após o erro, em vez de simplesmente relatá-lo.

Converta o driver para TakesScreenshot dentro do bloco catch ou finally e grave o arquivo antes do fechamento da sessão. Nomear a imagem de acordo com o método de teste torna uma execução de CI com falha legível sem a necessidade de reproduzir a falha localmente.

Resuma esta postagem com: