Blog > Selenium - Aprenda sobre Exceptions: NoSuchElementException

30/out

Todo mundo que começa a trabalhar com o WebDriver se depara com diversos tipos de erros durante a criação dos scripts de teste, mas nem todo mundo, rapidamente, entende quais são os tipos de erros lançados pelo WebDriver. Neste post aprenderemos o erro mais comum: o NoSuchElementException

O erro mais comum na utilização do WebDriver é o NoSuchElementException que sempre é disparado quando um elemento não é encontrado. Existem várias possíveis causas que iremos analisar logo mais.

Sempre que um NoSuchElementException é lançada, uma informação muito importante é apresentada: a forma de localização e o valor da forma de localização.
Veremos como isso se comporta com o exemplo geral.


Exemplo Geral

Abaixo temos no código a localização de uma elemento pelo seu ID “search”

Em uma execução podemos enxergar algo do tipo:

Note bem a exception apresentada. Nela temos dois elementos:

  • A exception lançada
  • Uma mensagem informando qual erro ocorrido (porque uma mesma exception pode ser gerada por diversos erros)

A exception lançada foi a org.openqa.selenium.NoSuchElementException.

A mensagem apresentada foi: Unable to locate element: {“method”:"id”, “selector":”search”}

Esta mensagem já apresenta qual foi o método de localização (id) e o valor contido neste método (search).
Assim conseguimos visualizar com maior precisão qual elemento não foi localizado.

Então não se preocupe (muito) quando esta exception ocorrer no seu código. Pare e analise qual foi o método e o seletor para investigar a causa do erro.


Quais as possibilidades desta exceção ser lançada?


Porque o elemento foi removido

O elemento pode não existir mais na página.

Para id, name, linkname, partialLinkName pode ocorrer que a forma de localização foi modificada.
Para xpath e css pode ocorrer que a expressão inserida não esteja correta


Porque o elemento está lá mais a exception foi lançada (espera)

Quando estamos desenvolvendo um script podemos esquecer que algumas requisições são assíncronas, fazendo com que o erro ocorre mesmo com o elemento lá.

Para resolver este problema é necessário adotar uma das formas de espera.


Porque o elemento está lá, não é um problema de espera

Algumas páginas web ainda hoje utilizam frames para estruturar o conteúdo de uma página web.
Quando isso ocorre é necessário dar o foco no frame para depois seguir com a localização do elemento.


Como tratar?

Qualquer linguagem orientada a objetos possui uma forma de tratar uma exception.

No exemplo abaixo há um código com tratamento e exceção em Java simulando a verificação se um determinado elemento está ou não presente.

Caso ele execute a primeira linha dentro do try o elemento está presente e retorna true.

Se o elemento não existir uma NoSuchElementException é lançada, mas podemos trata-la dentro do bloco catch, onde retornamos false.

Atenção: cuidado ao tratar o NoSuchElementException, pois há uma classe de mesmo nome do pacote java.util, mas o correto é selecionar/importar o do pacote org.openqa.selenium


Referências

http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/NoSuchElementException.html

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS