Appium: automação para apps mobile

Parte III

Bruno Carvalho
BRQ Tech
4 min readSep 1, 2018

--

Continuando a nossa série de artigos sobre automação mobile utilizando o Framework Appium, agora vamos mostrar como organizar melhor o seu projeto de automação utilizando o Padrão de Projeto ou Design Pattern.

Se você já veio do nosso último post(algo que eu considero que você leia) mostrando como iniciamos o projeto de automação, como cria a estrutura de um projeto de automação e como automatizar um app.

Caso, você ainda não tenha conferido a segunda parte, acesse o link abaixo:

Como foi citado no final do post acima, vamos falar de Screen Objects.

O que é o Screen Objects ?

Antes de explicarmos sobre o Screen Objects, vamos realizar uma breve introdução sobre o Page Objects, para melhorar a explicação de "fato" do Screen Objects.

Se você já realizou algum tipo de automação de testes web, provavelmente já utilizou o Page Objects, caso não tenha usado, abaixo tem um artigo do Martin Fowler, explicando um pouco sobre:

Basicamente para organizarmos o nosso projeto de automação com mais clareza, conseguindo reutilizar os elementos de uma Page(Página), ou uma Screen(Tela), sem precisar reescrever alguma parte do código, usamos a Orientação a Objetos.

Pensando em Orientação a Objetos, pense no mundo real com objetos, um Carro, uma Casa, um Livro.

Numa Page ou Screen nós organizamos com vários elementos(objetos) de uma Page(Página), que pode ser um Botão, Caixa de Texto, Link, etc.O Conjunto desses objetos(elementos) é chamado de Classe, e as ações desses objetos são chamados de método.

Na automação de testes mobile com Appium, organizamos a nossa Screen , mas usamos a mesma lógica do Page Objects, só que usamos telas e não páginas.

No Projeto da Calculadora que foi mostrado no post anterior a estrutura das pastas era organizada assim:

Estrutura de Projeto

Com o Padrão Screen Objects a Estrutura do projeto ficaria assim:

Estrutura do Projeto com Screen

Estruturamos o nosso projeto dessa forma, abaixo do diagrama:

Diagrama com a Estrutura do Projeto

Abaixo, nós vamos explicar, como funciona para estruturamos cada pasta do nosso projeto:

Support — Adicionamos o env.rb, com as configurações do Desired Capabilities, que foi explicado na Parte I e Parte II, e também com as gemas que gostaríamos de importar, seria o método import do Java por Exemplo, mas no Ruby é require.

#DICA, Lembre-se de adicionar no Gemfile as gemas, que você deseja importar no require, o arquivo Gemfile foi explicado na Parte II.

env.rb

No hooks.rb, vamos adicionar a suíte de testes iniciando o Driver(Appium), e encerrando o Driver(Appium).

hooks.rb

#DICA, adicione o App que você gostaria de testar na pasta Support.

Specs — Na Pasta Specs, vamos adicionar as especificações, usando o framework Cucumber, que automatiza as nossas especificações com a técnica BDD(Behaviour Driven Development).

Especificação usando BDD
Especificação usando BDD

Steps — Nos Steps, vamos instanciar a Classe(Conjunto de Objetos), com as suas ações, que são os métodos.

multiplica_steps.rb
soma_steps.rb

Na soma_steps.rb, se você percebeu, nós não declaramos o Dado ("que esteja na tela incial da calculadora"), nos Steps, como nós declaramos na feature multiplicar e reusamos na feature soma, se você adicionar a mesma frase no Cucumber, ele reutiliza o Step.

Screens — Nas Screens, vamos construir a Classe(Conjunto de Objetos) mapeando alguns elementos(objetos) da nossa tela que é chamada de Screen.

Na Classe acima, mapeamos alguns elementos do App Calculadora, se você tem alguma dúvida como funciona para mapear os elementos, veja a Parte I e a Parte II.Nos nossos métodos, vamos realizar as ações soma ou multiplica, o método(ação) toca_digito, ele recebe o valor da tela e converte em String, pois alguns elementos da calculadora é digit_número, então ele juntaria digit_com_o_valor_recebido_do_metodo_toca_digito e clicaria com .click(método de ação de clicar no elemento dos frameworks Appium e Selenium), dentro dos métodos soma e multiplica, ele receberia o valor da sua especificação do Cucumber em formato de String e realizaria o cálculo no App.

Após construirmos toda essa estrutura, vamos executar o nosso projeto de acordo com a estrutura que foi construída, abaixo tem um vídeo da execução:

Dúvidas que podem surgir neste post

Como faço para executar este projeto ?

Usamos o comando cucumber -t @nomedatag no terminal, que no nosso caso é @soma ou @multiplicacao, ou você pode usar o Rake para rodar testes em parelelo, mas esse é um outro capítulo :)

Como faço para aprender mais sobre programação e padrões de projeto ?

Como citei acima o Martin Fowler é um grande expoente do Agile Testing e do Software Engineering, você já pode ler alguns artigos dele, também têm diversos materiais interessantes na internet, aqui no Medium têm diversos artigos também.

Por que mapeamos uma Screen(Tela) Somente ?

Nesse App, temos somente uma Screen(Tela), em outro App você encontrará várias telas, e poderá realizar o mapeamento dos seus elementos(objetos), em diversas Screen(Telas).

--

--

Bruno Carvalho
BRQ Tech

QA Dev | Interested in Software Development | Music | NFL Fan