Blog > Selenium - Reconhecimento de Objetos

09/nov

Este material complementar para automação de testes com Selenium trata das diversas formas de reconhecimento de objetos, tanto no Selenium IDE quanto no Selenium WebDriver. Espero que gostem.

Faaaaaaala galera!

      Aqui vai um material complementar para automação de testes com Selenium. Trataremos aqui do reconhecimento de objetos, tanto no Selenium IDE quanto no Selenium WebDriver. Espero que gostem.

Primeiramente vamos ver as diversas perspectivas de uma página HTML:


  1. Perspectiva textual:


  1. Perspectiva renderizada:


  1. Perspectiva hierárquica:


      Enfim, existem várias formas de ler e entender um arquivo HTML e para trabalhar com automação de testes em aplicações Web precisamos ter domínio de HTML. Caso este tema seja uma incógnita para tí, sugiro o estudo de fundamentos em HTML e abaixo estão alguns links que podem te ajudar a começar.

CODE ACADEMY (Português)

UFRJ (Português)

      Tendo como premissa que você conhece HTML vamos partir para o alinhamento de alguns termos referentes ao reconhecimento de objetos.

  • O que é um objeto? Um objeto é um elemento HTML. Pode ser chamado também de TAG HTML. Ex.: "title", "input" ou "button".
  • O que é um atributo? Um atributo é uma propriedade do objeto. Ex.: O elemento "input" da perspectiva 1 descrita acima possui o atributo "type". Essa propriedade possui o valor "text".
  • O que é texto? Texto é a informação contida entre a abertura e o fechamento do objeto. Ex.: O elemento "title" da perspectiva 1 descrita acima possui o valor "Exemplo". Perceba que um atributo é diferente de um texto.

      Vale lembrar que O CARA Elias Nogueira, no post de introdução ao Selenium IDE, dedicou o tópico "Localizando Elementos HTML" as formas de reconhecimento de objetos. Vale muito a leitura! INTRODUÇÃO AO SELENIUM IDE (Elias Nogueira)

      Vamos agora ver os métodos de reconhecimento de objeto que podem ser utilizados no Selenium - tanto IDE quanto WebDriver.

Reconhecimento por ID

      Como em uma página HTML eu posso ter apenas 1 (um) id único por objeto, essa forma de reconhecimento é a mais simples, mais rápida e mais assertiva. O problema é que nem sempre o objeto que queremos interagir possui ID. Nesses casos devemos utilizar outra forma de reconhecimento de objetos. O exemplo abaixo mostra como utilizar reconhecimento por ID.

HTML: 

Selenium IDE: id=txtNome

Selenium WebDriver: driver.findElement(By.id("txtNome"))


Reconhecimento por Nome

      Em uma página HTML eu posso ter vários objetos com o mesmo nome. Essa forma de reconhecimento também é simples e rápida, porém pode não ser tão assertiva visto que o Selenium retorna o primeiro objeto que ele encontrar que contenha o nome informado, ou seja, caso eu precise obter o segundo elemento que possui determinado nome necessito utilizar outra forma de reconhecimento de objetos. O exemplo abaixo mostra como utilizar reconhecimento por Nome.

HTML:

Selenium IDE: name=campoNome

Selenium WebDriver: driver.findElement(By.name("campoNome"))


Reconhecimento por XPath

      Não vou me aprofundar nessa forma de reconhecimento de objetos, visto que o grande Júlio de Lima já escreveu um post completão sobre XPath, que pode ser visto aqui: IDENTIFICANDO ELEMENTOS COM XPATH (Júlio de Lima)

Material complementar:

Hedley Proctor (Inglês)

W3Schools (Inglês)

Tools QA (Inglês)


Reconhecimento por Link

      Essa forma de reconhecimento também é simples e rápida porém, semelhante ao reconhecimento por nome, pode não ser tão assertiva visto que o Selenium retorna o primeiro objeto que ele encontrar que contenha o link informado, ou seja, caso eu precise obter o segundo elemento que possui determinado texto necessito utilizar outra forma de reconhecimento de objetos. Basicamente, essa forma de reconhecimento busca um elemento "a" (que representa um link) que possua o texto informado pelo automatizador. O exemplo abaixo mostra como utilizar reconhecimento por Link.

HTML: 

Selenium IDE: link=Clique aqui

Selenium WebDriver: driver.findElement(By.linkText("Clique aqui"))


Reconhecimento por DOM

      Não vou descrever esta forma de reconhecimento de objetos, visto que o WebDriver já não disponibiliza reconhecimento por DOM, e as outras formas de reconhecimento de objetos atendem perfeitamente sem a necessidade de utilizarmos DOM.


Reconhecimento por CSS

      Essa forma de reconhecimento utiliza o mesmo mecanismo das folhas de estilo (CSS) para localizar um objeto na tela. Ela é um pouco complexa mas é bem completa e nos permite localizar objetos que não tenham id nem nome. Assim como quase todas as formas de reconhecimento de objetos, pode não ser tão assertiva visto que o Selenium retorna o primeiro objeto que ele encontrar com as características informadas, ou seja, caso eu precise obter o segundo elemento que possui determinada característica necessito utilizar outra forma de reconhecimento de objetos. Outro ponto negativo é que alguns localizadores CSS não são compativeis com determinadas versões de navegadores, o que pode fazer com que o script execute em um navegador mas não execute em outro. O exemplo abaixo mostra como utilizar reconhecimento por css.

HTML:

Selenium IDE: css=.center

css=h1[name='titulo']

css=h1.center

Selenium WebDriver: driver.findElement(By.cssSelector(".center"))

driver.findElement(By.cssSelector("input[name='titulo']"))

driver.findElement(By.cssSelector("h1.center"))

Material Complementar:

SauceLabs (Inglês)

W3C (Inglês)

Página que mostra um comparativo entre as formas de reconhecimento XPath, CSS e DOM: Simple Talk (Inglês)

Espero que tenham gostado! Qualquer dúvida me enviem email que terei o maior prazer em ajudá-los! No início desta página é apresentado meu mini currículo e meus dados de contato. Até a próxima!

POSTS RELACIONADOS

Webinar gratuito de Selenium IDE - Online

Aprenda tudo sobre o Selenium IDE neste Webinar

AGENDA

CURSOS RELACIONADOS