Blog > Automação de Testes Mobile com Appium - Parte 3

29/jul

Neste post aprenderemos, de forma básica e direta, a como interagir com alguns componentes Android, efetuando ações como digitação e cliques.

Introdução

O Appium é utilizado para automatizar aplicações Android, onde iremos remover a necessidade de executar sempre o mesmo caso de teste manualmente. Aprenderemos a como localizar os componentes na tela, interagir e garantir que os resultados esperados estejam presentes na aplicação mobile.

Esta é uma séria de posts sobre o Appium. Se você ainda não leu os posts anteriores, leia através do link abaixo na sequência apresentada:

Automação de Testes Mobile com Appium - Parte 1

Automação de Testes Mobile com Appium - Parte 2

Inspecionando Componentes Android com UIAutomatorViewer

Mão na massa...

Este post possui muito código. É recomendado despreender um tempo maior que nos outros posts para que você possa executar todos os passos e automatizar a aplicação mobile. Também é necessário ter conhecimento dos outros dois posts sobre Appium.

Neste post utilizaremos apenas a forma de localização por ID, ou seja, utilizaremos os dados da propriedade resource-id dos componentes na tela

Escrevendo a base de código para localização dos componentes

Tudo referente a localização com o Appium inicia com o objeto AndroidDriver. Como, nos posts anteriores, colocamos o nome desse objeto como driver, utilizaremos este nome para acessar diversos métodos pertencentes a ele.

Um método é especialmente importante e utilizado sempre para a localização de elementos: findElement()

O método findElement() recebe por parâmetro um objeto chamado By. Este objeto possui diversos métodos que são as formas de localização, entre elas o id().

Cada forma de localização recebe um parâmetro que é a base da localização. Por exemplo: se estamos localizando por id() é necessário colocar o conteúdo do resource-id como parâmetro, entre aspas duplas (isso serve para qualquer método do objeto By).

O comando completo fica como o abaixo:

driver.findElement(By.id("<resource-id aqui>");

Se efetuarmos uma tradução do comando é possível entender a lógica de localização (em português de forma simples onde os itens em parênteses são os comandos):

Android (driver), encontre o elemento (findElement) pelo (By) id (id) "resource-id aqui" 

Simples, não?

Caso de Teste para automatizar

Iremos efetuar as seguintes ações no aplicativo TrianguloApp:

  1. Digitar o valor 3 no campo Lado 1
  2. Digitar o valor 3 no campo Lado 2
  3. Digitar o valor 3 no campo Lado 3
  4. Clicar no botão Calcular
  5. Validar a mensagem "O triângulo é Equilátero"
O TrianguloApp pode ser obtido através do link de pré-condições no post Automação de Testes Mobile com Appium - Parte 2

Execute estes passos na aplicação para podermos, na sequência, obter os IDs para automatizar este caso de teste.

Obtendo os IDs para o script

Com o caso de teste executado, abra o UIAutomatorViewer e inspecione todos os elementos, obtendo e anotando a propriedade resource-id de cada componente como na imagem abaixo:

Agora é só escrever os comandos de localização para cada elemento como primeiro passo de nosso script de teste. Nos próximos passos iremos alterar o script.

driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado1"));
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado2"));
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado3"));
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/btn_Calcular"));
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_triangulo"));

Ações básicas dos componentes

Depois de ter localizado cada componente na tela está na hora de executar as ações. O nosso caso de teste temos três ações distintas:

  • Digitar o valor 3 nos três campos
  • Clicar no botão calcular
  • Pegar o texto da mensagem para futura validação

Nesta ordem, temos os seguintes comandos:

  • sendKeys(""); = preenche o componente com um determinado texto
  • click(); = clica em um componente
  • getText(); = pega o texto do componente

Colocamos estas ações ao final de cada comando, antes do ponto e vírgula (;), onde temos o seguinte código resultante:

driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado1")).sendKeys("3");
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado2")).sendKeys("3");
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_lado3")).sendKeys("3");
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/btn_Calcular")).click();
driver.findElement(By.id("com.eliasnogueira.trianguloapp:id/txt_triangulo")).getText();<br>
Note que no comando sendKeys sempre devemos passar o valor entre aspas duplas, independente se ele for um número ou caractere.

Executando o script

A execução inicial é simples: basta clicar no botão Run ou ir no menu Run/Run no Eclipse IDE.

No script com imagem abaixo para termos uma base que ele executou com sucesso, foi adicionado uma saída no console com o texto "Terminou a execução com sucesso!"

Note no canto direito que os campos serão preenchidos, o botão Calcular será clicado e a mensagem "O triângulo é Equilátero" será apresentada.

Adicionando uma asserção

Este script de teste ainda não é um script de teste... mas porque isso?

Porque se o resultado sair diferente de "O triângulo é Equilátero" não teremos nenhum tipo de mecanismo automático para nos informar da mudança. É ai que entra uma ferramenta de teste unitário para dar suporte ao teste.

Primeiro vamos adicionar a biblioteca do JUnit ao Eclipse. Para isso siga os passos abaixo (também sendo exibido na imagem)

  1. Clique bom o botão direito sobre o nome do projeto e selecione o item Build Path -> Configure Build Path
  2. Clique sobre a aba Libraries
  3. Clique no botão Add Library
  4. Selecione o item JUnit e clique em Next >
  5. A seleção na combo apresentará JUnit 4. Clique em Finish
  6. Clique no botão OK da tela de propriedades

Agora alteraremos o método main para um método público, adicionando a anotação @Test do JUnit para indicar que o método é um teste. Para isso siga os passos a seguir (também apresentado na imagem abaixo):

  1. Altere o nome do método public static void main (String[] args) para public void testeTriangulo()
  2. Adicione o texto @Test acima do método public void testTriangulo(). Pressione CTRL + Espaço para apresentar a lista de opções de auto-complete. Selecione o primeiro item @Test - org.junit

Agora iremos alterar o script para colocar uma asserção, que é uma garantia de um determinado resultado.

Siga os passos abaixo para adicionar a asserção (também disponível na imagem abaixo):

  1. Acima da ultima linha de localização escreva Assert e pressionar CTRL + Espaço selecionando o item Assert - org.junit
  2. Ao final da palavra Assert pressione ponto e selecione qualquer método com nome assertEquals
  3. Apague o texto "expected" e substitua por "O triângulo é Equilátero"  (com as aspas duplas)
  4. Apague o texto "actual". Copie a ultima linha (de localização), mas sem o ponto e vírgula. Agora cole no lugar do texto.

Agora o script é um script de teste, pois tem uma forma de validação (assert) atrelada a ele.

Executando novamente o script

Agora que executarmos o script, a janela do JUnit será apresentada controlando a execução do teste.

Como a execução será com sucesso, a janela do JUnit apresentará uma faixa verde, indicando o sucesso na execução.

Basta clicar no botão Run ou selecionar o menu Run/Run no Eclipse.

Considerações finais

Neste post aprendemos a como localizar e interagir com componentes em uma aplicação Android, bem como transformar nosso script em um script de teste.

Estas ações serão executadas no dia-a-dia de qualquer testador que deseja automatizar uma aplicação mobile para Android com Appium.

POSTS RELACIONADOS

Workshop Gratuito de Appium (Online)

Automatize os testes mobile de suas aplicações mobile Android usando Appium.

AGENDA

CURSOS RELACIONADOS