Calabash Android – Além dos Canned Steps

foto_post

 

Neste post, aprenderemos a programar novos testes (além dos canned steps já implementados no Calabash) e a manipular aplicações nativas do Android. Esses novos testes são programados em linguagem Ruby dentro do arquivo calabash_steps.

Se você não acompanhou os posts anteriores, acesse os links da Parte 1Parte 2 e aprenda a instalar o Calabash Android em sua máquina. Para aprender a começar um projeto, clique aqui. Para aprender a criar seus primeiros testes, clique aqui. E para uma ótima dica de report, clique aqui.

Derivando os Canned steps

1. Mudando os parâmetros

É possível, através do UI Automator Viewer, buscar elementos através de id’s, descrição, texto e etc.

UI Automator Viewer

UI Automator Viewer

 

Nesse caso de teste, precisamos mudar da aba Pessoas para a aba Serviços. Os ícones não possuem id próprio. Todos os ícones possuem o id “tabTitle”. E agora? O que fazer?

Simples! Buscaremos ele pela content description!

Temos a seguinte implementação para pressionar elementos na tela através do id.

Busca pelo id

Busca pelo id

 

– Como alterar para que passe a buscar pela content description?

Busca pela content description

Busca pela content description

 

Simples assim! Apenas alterando os parâmetros.

O site Testmunk é um grande aliado nessa etapa dos testes.

Manipulando aplicações nativas do Android

1. ADB Shell Input Events

Popup Android

Popup Android

 

Eles funcionarão como um “tab” na aplicação.

O step ficará da seguinte forma:

Step

Step

 

Linha 37: Para selecionar o botão (observar se o botão está selecionado por default).

Linha 38: Mover o foco para a direita, no caso, para o SIM.

Linha39: Selecionar o campo em foco.

Alguns exemplos:

Canned Steps

Implementação de keyevents do Android

 

Para conhecer outros ADB Shell Input Events, acesse o link do StackOverflow.

Habilitar e desabilitar AIRPLANE MODE e Wi-Fi

Utilizando o Calabash, também podemos fazer testes de conectividade. É possível habilitar e desabilitar o airplane mode e wi-fi através das activity_actions.

 1. AIRPLANE MODE

Para habilitar e desabilitar o AIRPLANE MODE, os steps ficam da seguinte forma:

AIRPLANE MODE

AIRPLANE MODE

 

A implementação é da seguinte forma:

Implementação para habilitar o airplane mode

Implementação para habilitar/desabilitar o airplane mode

 

2. Wi-Fi

Para habilitar/desabilitar o wi-fi do aparelho, iremos derivar o que já foi implementado para o AIRPLANE MODE.

– Mudaremos apenas a activity action:

Implementação para habilitar/desabilitar wi-fi

Implementação para habilitar/desabilitar wi-fi

 

Para ver outros activity actions, acesse esse link. E, para mais informações sobre able and disable network, acesse esse link.

No próximo post, aprenderemos como executar os testes automatizados em mais de um aparelho ao mesmo tempo!

Até a próxima!

Sobre o(a) autor(a)

Letícia Bomfin Ramos
Letícia Bomfin Ramos

Graduanda em Sistemas de Informação pela Pontifícia Universidade Católica de Minas Gerais, iniciando a carreira em 2012 como estagiária da Gerência de Homologação na Prodabel. Hoje, atua como Analista de Qualidade de Software na Take. Apaixonada pela area de qualidade de software, mobile, chatbots e automação de testes. Conquistou o 4º lugar e o prêmio Most Useful Test Report na etapa South America do Software Testing World Cup 2014, ao lado de Samantha (QA), André (QA) e Rhamon (PO).

9 comentários

Comente
  • Olá Letícia, boa tarde!

    Venho lendo diversos posts sobre automação de testes mobile e tenho que dizer, que os seus posts são maravilhosos e não poupam detalhes. Está de fato de parabéns.

    Eu estou caçando na verdade uma coisa simples, ou seja, preciso simplesmente saber qual é o comando que faz o efeito de tocar num elemento, segurar e rolar.

    Andei olhando alguns TouchHelpers (confesso que não testei todos ainda..), mas gostaria de conferir contigo.
    http://www.rubydoc.info/gems/calabash-android/0.5.2/Calabash/Android/TouchHelpers

    Desde já, grato e repito, parabéns pelos posts e sua didática.

    Abraço!
    Jessé Dantas Lima
    Skype: jess.dantas

    • Oi, Jessé! =)

      Fico muito feliz com seu comentário. Se entendi bem, você precisa de “gestures”.
      Tente usar o “swipe” ou o “drag”.

      #Swipe
      Exemplo:
      Then I swipe left

      Implementação Android:
      Then /^I swipe left$/ do
      perform_action(‘swipe’, ‘left’)
      end

      #Drag
      Exemplo:
      Then I drag from 50:100 to 50:250 moving with 20 steps

      Implementação Android
      Then /^I drag from (\d+):(\d+) to (\d+):(\d+) moving with (\d+) steps$/ do |from_x, from_y, to_x, to_y, steps|
      perform_action(‘drag’, from_x, to_x, from_y, to_y, steps)
      end

      Dica: Para achar os valores de x e y, você pode habilitar a localização do ponteiro em Configurações –> Desenvolvedor
      PS.: Se nada disso der certo, procure por mais exemplos de “gestures”.

  • Olá Letícia,

    gostaria de saber como localizar e inserir dados em elementos da tela pelo seu posicionamento (X,Y).
    Desde já agradeço

    • Boa tarde Rafael,

      Não sei se entendi bem a sua pergunta. Você precisa inserir um texto em um campo?
      Se sim, aconselharia algumas coisas antes:
      – Se não possui Id do elemento procurado, procure por outros elementos como content description ou index (caso ele seja único na tela);
      – Caso tenha contato com a equipe de desenvolvimento, peça aos desenvolvedores para sempre colocarem Ids e content descriptions nos elementos para facilitar na sua implementação.

      Mas, se nenhuma dessas coisas são possíveis, aqui vai a dica para location:
      – Passe as coordenadas xy do elemento;
      – Assim que o elemento for localizado, clique nele;
      – Assim que o elemento estiver em foco, insira o texto que desejar.

      Contras dessa implementação:
      – O teste fica mais instável assim;
      – Essa implementação só funcionará em um único aparelho, pois as dimensões de tela podem variar.

      Espero ter ajudado 😉

      • Bom dia Leticia,

        Obrigado pelo retorno. Quanto à questão do posicionamento, é que não sei como passar as coordenadas do elemento no script de teste. Você teria algum exemplo? O que eu acho nas pesquisas é como rolar a tela de um ponto até outro ponto, mas não achar um campo por coordenadas. De qualquer forma agradeço novamente o retorno e parabéns pela matéria. (Obs.: O post sobre o Appium foi muito importante pra mim….valeu).

        • Ah sim! Nesse caso, basta você mudar a ‘perform_action’ no código.

          No arquivo calabash_steps.rb, acrescente:

          Then /^I click on screen (\d+)% from the left and (\d+)% from the top$/ do |x, y|
          perform_action(‘click_on_screen’, x, y)
          end

          e chame da forma “Then I click on screen 234 from the left and 987 from the top” no seu arquivo .feature.
          Os valores ali são meramente ilustrativos. Substitui pelas coordenadas que você quer. Primeiro o X e depois o Y.

          Espero, agora, ter ajudado! Rss 😉

  • Boa tarde Leticia, tudo bem?

    Primeiramente quero agradecer por todos os tutoriais do calabash.
    Eu consegui do zero, instalar, configurar e iniciar a automação mobile por eles.
    Agradeço muito pelos ótimos posts.

    Eu tenho uma dúvida e queria ver se poderia me ajudar:

    Como eu faço para selecionar/clicar em um elemento de uma lista?

    Por exemplo:
    Eu tenho uma lista de filtros no app, onde posso ativar ou não switchs e eu gostaria de habilitar/desabilitar uns e outros.

    Agradeço desde já a atenção!

    • Olá Mateus!! Fico feliz que gostou dos posts e que eles tenham te ajudado.

      Assim… sem ver exatamente o que é, não sei se posso te ajudar.
      O lugar que você precisa clicar tem id, content description, index ou alguma coisa que diferencie ele dos demais?
      Você pode tentar buscar por algum desses elementos e mandar ele clicar.

      Se for uma list view:

      Then /^I press list item number (\d+)$/ do |line_index|
      performAction(‘press_list_item’, line_index, 0)
      end

      E vê se cada caixinha tem um index diferente para ser selecionado.
      Aqui tem um link com alguns exemplos de clicks.

      https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/steps/press_button_steps.rb

      Espero ter ajudado. Qualquer dúvida, me chama 😉

Deixe uma resposta para Rafael Simplício Cancelar

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Você pode usar as seguintes tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

by Take ® 2015 | Todos os direitos reservados.linkedin