Appium: Automação para Apps Mobile
Parte II
Continuando a nossa série sobre automação mobile utilizando o Appium, hoje iremos mostrar a estrutura de um projeto de automação com cucumber + ruby + appium.
Se você já veio do nosso último post (algo que recomendo a leitura), onde explicamos o que é, como surgiu, pré-requisitos para a sua utilização e os primeiros passos com o Appium, então não perca este post sobre a estrutura de um projeto de automação mobile.
Caso você ainda não tenha conferido a primeira parte, acesse o link abaixo:
Vamos iniciar de onde?
Presumo que você já tenha todo o ambiente configurado, então vamos colocar a mão na massa. O primeiro passo é saber qual é o app que será testado, provavelmente você já testa/testou o seu app manualmente e agora está buscando mais uma forma para aumentar a cobertura dos seus testes com a automação (o que na verdade a automação irá te ajudar é ter minimamente cenários automatizados para a sua regressão, deixando mais tempo para testar as funcionalidades mais complexa, fluxos alternativos e realizando testes exploratórios). Neste passo a passo irei utilizar o app da calculadora que já vem no próprio Android Oreo.
Mas como pego um app que já está instalado no meu smartphone?
Inicie o emulador ou conecte o celular no seu computador. Abra o terminal e digite:
Esse comando mostra todos os pacotes de apps instalados no seu celular.
Copie o package do seu app (depois dos :)
Digite o comando adb shell pm path e cole o pacote do seu app:
Copie o path do seu app e execute o comando adb pull <diretório copiado> <diretório de destino>.
Para baixar o app no seu diretório atual é necessário dar o espaço e colocar o ponto(No meu caso o app vai para a pasta Desktop).
Criando o projeto
Caso ainda não possua a gem do cucumber instale com o comando:
gem install cucumber
Criando o diretório/pasta do seu projeto:
Agora que você já criou o diretório do seu projeto, acesse ele com pelo seu editor de texto favorito(o meu é o VSCode).
Vamos colocar o nosso app dentro da pasta /features/support do nosso projeto:
Agora vamos abrir o arquivo env.rb e iniciar a nossa configuração de ambiente:
Acima carregamos na memória as gems do appium e do cucumber, definimos as capabilities do nosso app, iniciamos e finalizamos o driver do appium a cada execução.
No primeiro post explicamos o que são capabilities, o que significa cada argumento e como conseguir os dados para preenchê-los.
Escrevendo os Cenários:
Como estamos testando um app de calculadora, nada mais justo do que começar escrevendo o cenário de uma das quatros principais operações de uma calculadora.
Crie o arquivo dentro da pasta features com a extensão .feature e escreva o cenário utilizando o BDD:
Inicie o servidor do appium clicando em Start Server:
Acesse o seu projeto pelo terminal e execute o comando cucumber:
Neste momento o cucumber gera os steps definitions, mas como os steps estão indefinidos o appium não executará nenhuma ação.
Crie o arquivo "multiplicar_steps.rb" dentro da pasta step_definitions.
Copie e cole os snippets gerados do seu terminal, no arquivo criado.
Mapeando os elementos
Temos algumas formas de mapear os elementos de um app Android/iOS pelo appium, o que foi mostrado no primeiro post da série é o mais amigável (Appium Desktop), outro modo é pelo Appium Ruby Console (ARC) e o terceiro por algum debug do Ruby, por exemplo, o PRY no meio da execução.
Iremos utilizar o Appium Desktop, então clique em New Session Window:
Na sessão aberta, preencha os campos conforme os capabilities que estão no seu env.rb:
Clique em Start Session e aguarde o Appium subir o app no seu device:
O nosso primeiro step valida se o app foi aberto corretamente. Uma das formas de verificar isso é identificando um elemento do app na tela inicial e validar se ele foi aberto corretamente:
Como nosso app tem um id para identificar a tela principal, podemos utilizá-lo e validar dentro do nosso step:
Agora precisamos multiplicar 3 por 9, de acordo com a nossa especificação do BDD:
Precisamos mapear os elementos da tela que são as teclas 3, 9, operação de multiplicação e o "=". Faremos isso neste step:
Acima, mudei as variáveis "int" e "int1" para "a" e "b", em seguida, mapeei os elementos citados.
Dentro do elemento "digit_3" e "digit_9", realizei uma interpolação com as variáveis "a" e "b" que contém os valores 3 e 9 que estão nos steps do nosso cenário, ou seja, quando você mudar os valores do seu BDD, automaticamente esses valores serão passados para as variáveis.
Por fim, faremos o nosso querido assert dentro do Então. Para começar, precisamos pegar o valor do resultado da multiplicação, como faremos isso?
É só mapear o resultado, verificar se ele possui id (que é o nosso caso) e pegar o texto deste elemento:
O id do elemento é "result", com o método ".text" pegamos o valor que contém no atributo texto do elemento.
Sabendo disso utilizamos uma condição dentro do nosso teste para caso o valor seja diferente de 27 o nosso Então falhe:
Lendo a nossa condição dá para entender: Falhe "Texto que será apresentado no console" a não ser que o texto do elemento seja igual ao nosso resultado.
Execute o nosso teste pelo terminal com o comando "cucumber" e veja os seguintes resultados:
Outro passo importante é criar o arquivo Gemfile, fora da estrutura da pasta features com as gems que serão utilizadas no nosso projeto:
Essa é a estrutura final do nosso projeto de automação mobile:
Dúvidas que podem surgir ao final do post
Thialison, você faz desta forma a automação mobile? Sim e não, esse post mostra uma base de projeto para a sua automação e você pode começar com ele!!!
E o ScreenObjects? Ele fará parte do nosso próximo post, se você faz PageObject no seu projeto Web, já pode tentar neste projeto mobile.
Tentei multiplicar dezenas, quebrou o meu teste e agora? Quanto mais você souber da linguagem que está trabalhando, mais claro ficará para resolver esse problema, a melhor forma seria criando um método que te ajudará a resolver esse inconveniente. Vamos escrever sobre isso nos próximos posts também.
É isso por enquanto pessoal, tentei mostrar de uma forma simples como é a estrutura de um projeto mobile com Appium em poucos passos.
Tem bastante conteúdo sobre isso pela internet, então divirta-se!!!
Aguarde o nosso próximo post que será sobre ScreenObjects.
Você pode conferir este projeto no meu GitHub: