Entendendo o UiAutomator2 na Prática

16/11/2024

UiAutomator2: A Ferramenta que Manda nos Testes do Meu App

Pensa em um app, qualquer um. Agora imagina eu precisando testar todas as funções dele, em todos os tipos de celular, pra garantir que tá tudo funcionando direitinho? É aí que entra o UiAutomator2!

O UiAutomator2 é um framework de automação desenvolvido pelo Google para interagir com a interface do usuário (UI) de dispositivos Android. Ele é amplamente utilizado em testes de UI, tanto em aplicativos individuais quanto em interações entre diferentes aplicativos ou componentes do sistema Android.

No contexto de automação com ferramentas como Appium, o UiAutomator2 é uma das plataformas mais utilizadas, fornecendo uma interface robusta para controlar e interagir com elementos de aplicativos Android.É parte do Android Open Source Project (AOSP) e tem acesso direto às APIs de automação do Android.



O que ele faz?

Em poucas palavras, ele me permite criar scripts que interagem com a tela do meu app como se eu estivesse usando o dedo. Clico em botões, digito textos, arrasto elementos... tudo isso de forma automatizada.

Por que eu preciso disso?

  • Acelerar os testes: Imagina ter que testar manualmente cada função do app em dezenas de dispositivos diferentes? Com o UiAutomator2, eu consigo automatizar essa tarefa e ter os resultados muito mais rápido.
  • Garantir a qualidade: Ao automatizar os testes, eu consigo identificar e corrigir bugs mais rapidamente, antes que eles cheguem ao usuário final.
  • Facilitar a manutenção: Quando eu faço uma mudança no app, posso rodar os testes automatizados para garantir que nada foi quebrado.

Como ele funciona?

O UiAutomator2 se comunica diretamente com o sistema operacional do Android. Eu escrevo scripts em uma linguagem de programação que ele entende (Java, Python, etc.) e ele traduz esses comandos para ações na tela do dispositivo.

E na prática, como eu uso?

  1. Identifico os elementos: Primeiro, eu preciso identificar os elementos da tela do meu app que quero interagir. Isso pode ser feito por meio de suas propriedades, como texto, id ou classe.
  2. Crio os scripts: Em seguida, eu escrevo os scripts, indicando as ações que quero que o UiAutomator2 execute. Por exemplo, "clique no botão 'Entrar'", "digite 'minha senha' no campo de senha".
  3. Executo os testes: Por último, eu executo os scripts e o UiAutomator2 vai realizar todas as ações que eu especifiquei.
No artigo: https://blog.josedarci.com/post?url=Automacao-de-Testes-Mobile-com-Appium-Um-Guia-Pratico-para-Iniciantes eu utilizei o UiAutomator2:

No trecho "from appium.options.android import UIAutomator2Options"Importamos a classe UiAutomator2Options para configurar as opções específicas do UiAutomator2.Segue o código:


from appium import webdriver
from appium.options.android import UiAutomator2Options
import time

# Configurações do dispositivo e do app
options = UiAutomator2Options()
options.platform_name = "Android"
options.platform_version = "14" # Substitua pela versão do Android
options.device_name = "Galaxy S22 Ultra" # Nome do dispositivo
options.app_package = "com.pally_evil_studio.NebulaPhantoms" # Nome do pacote do app
options.app_activity = ".RunnerActivity" # Atividade principal do app
options.no_reset = True # Não reinicia o app entre execuções

# Inicializar o driver Appium
driver = webdriver.Remote(
command_executor="http://127.0.0.1:4723", # Certifique-se que o Appium Server está rodando
options=options
)

try:
# Aguarde o aplicativo abrir
time.sleep(5)

# Toque no botão "Play" com coordenadas
driver.execute_script("mobile: clickGesture", {"x": 708, "y": 1205})

print("Botão 'Play' clicado com sucesso!")

# Aguarde alguns segundos para observar o resultado
time.sleep(5)

finally:
# Feche a sessão
driver.quit()



Em resumo:

O UiAutomator2 é a minha ferramenta essencial para garantir a qualidade dos meus apps Android. Ele me permite automatizar tarefas repetitivas, encontrar bugs rapidamente e entregar um produto final mais confiável. É como ter um exército de testadores trabalhando 24 horas por dia para mim!