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.
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.
