Uiautomator

Boa noite,

Estou tentando automatizar um app em appium, quando utilizo o UIautomator não exibe nenhum detalhe, exibe somente a class e o package, alguém sabe me informar como posso pegar por coordenadas os campos, ou se tem alguma outra maneira?

@Danúbia-Paiva A versão do Android (emulador ou dispositivo) deve ser menor que o 4.1 no teu caso.
O id só foi introduzido nas versões a partir da 4.1+

Tu consegue encontrar esta informação aqui
https://appium.io/slate/en/tutorial/android.html?ruby#uiautomatorviewer

Dica: sempre use um dispositivo real ou emulador com uma versão que os teus usuários mais utilizam ;)

E alguns apps feitos em react e ionic estavam tendo problema em não aparecer o resource-id. (e ainda não vi atualização para o caso do ionic ainda…)
A versão mais “interessante” de ver elementos é 4.3 >(abaixo até a 4.1 até se consegue, mas aumenta a % de uns errinhos e etc…) .
Ou se quiser ser “bração”, dá para chamar comandos pelo uiautomator catando o que tiver texto com o “.descriptionContains()”…
(não recomendável by the way, mas em casos extremos…)

-1

@Ramses-Saccol-de-Almeida aplicações desenvolvidas em Ionic não vão mostrar resource-id porque é ela (app em Ionic) é encapsulada em uma WebView,

@Elias-Nogueira Concordo parcialmente. Ionic é encapsulada em uma webview, mas os projetos em que mexi, a estrutura descia uma “árvore” de views as quais certos pontos eram “buttons”, ou “fragments” (até alerts, e não me pergunte como pq nem eu entendi…)e com isso possuiam resource-id para captura e interação.
Concordo que a maioria não é feito assim, mas não dá para descartar que poderia aparecer um resource-id (acho que tem no bugtrack deles algo assim.)
App bom para brincar com Ionic e ver esse tipo de estrutura é o Ionic-conference-app.
Agora só falta a gente saber se Danúbia resolveu o problema dela né? (Espero que sim …:+1: )

-1

@Ramses-Saccol-de-Almeida Todos fragments, buttons, alerts, etc… utilizados pelo Ionic são do SO nativo e não fazer parte real do Ionic…
Tanto que, se tu inspecionar uma app Ionic no UIAutomatorViewer, tu poderás ver uma série de componentes próprios do Android até chegar a WebView.

Agora os campos reais de interação (labels, inputs, etc…) sempre serão web não havendo resource-id para eles (por estarem dentro da WebView)

@Elias-Nogueira ok, se está dizendo…quem sou eu para dizer algo contra?
:+1:
O que posso dizer é que em projetos de ionic, os quais mexi, campos de inputs, labels e outros os resources-id’s eram coisas que lembravam bem mesmo apps híbridos (algo tipo, tab-02, ou input-text-tx)…Mas como falei, concordo parcialmente… Só não consigo confirmar mandatóriamente que o comportamento é fixo.
E , novamente, espero que a danúbia tenha resolvido o problema dela. Pois saimos muito do foco da dúvida dela…

Agora só falta a gente saber se Danúbia resolveu o problema dela né? (Espero que sim …:+1: )

Agora falta a @Danúbia-Paiva responder… :P

Bom dia, gente!

Desculpem me a demora. Não deu certo, estava usando a versão 4.4 e tentei a 5.0, ainda sim não deu certo. Aparece somente a class, package e content-desc.

Se alguém tiver mais alguma sugestão, agradeço.

O aplicativo não é ionic mas utiliza o cordova que é a mesma base. Ao chegar na webview não mostra nada na arvore.

@Danúbia-Paiva Show!
Então tu precisa inspecionar a página dentro da WebView pelo Chrome DevTools através do Chrome Inspector…

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/
https://gonzalo123.com/2014/08/04/debugging-android-cordovaphonegap-apps-with-chrome/

@Danúbia-Paiva disse em Uiautomator:

O aplicativo não é ionic mas utiliza o cordova que é a mesma base. Ao chegar na webview não mostra nada na arvore.

É, cai no contexto que estavamos conversando. O Ionic usa cordova para algumas interações (me corrige ae @Elias-Nogueira se tiver errado). basicamente o que deve ter sido feito é algo sem tags (ou id’s) e com isso fica essa massaroca.
Acho melhor procurar os elementos pelo navegador (chrome dev-tools)
E se vai automatizar, dá uma olhada no protractor (parece ser uma opção mais sensata…)
Saindo um pouco do contexto, vou deixar esse link para consulta:
http://gonehybrid.com/how-to-write-automated-tests-for-your-ionic-app-part-3/

@Ramses-Saccol-de-Almeida É isso mesmo. O Ionic usa a base de plugins do Cardova e uma base quase igual de código.

O Protractor é uma das melhores soluções se for feito diretamente no browser (e até mais rápido a execução). Mas se tiver que executar um cenário completo (instalar a app, abrir e executar testes) vai ter que ser por uma API de testes para mobile mesmo (selendroid, appium, calabash)

@Elias-Nogueira não entendi “vai ter que ser por uma API de testes para mobile mesmo (selendroid, appium, calabash)”. Estou fazendo em appium. Quanto a usar o chrome dev-tools não tem como, já verifiquei ate com o desenvolvedor.
O protractor nunca usei, não sei o que é exatamente, mas vou procurar para ler.

@Danúbia-Paiva Não tem como pelo chrome dev tools?
Nem tentando dessa maneira ( link antigo, pensamento atual…)
https://www.codeproject.com/Tips/1030830/Debug-Ionic-Android-Application-On-Mobile-Devices

@Danúbia-Paiva a inspeção dos elementos terá que ser feita pelo Chrome DevTools.
Se tu plugar o dispositivo real ou ter aberto o emulator, e estiver na tela da aplicação basta ir no Google Chrome e digitar “chrome://inspect”.
Tem que aparecer o nome do dispositivo e um botão inspect na tela. É só clicar no botão inspect e sair inspecionando…

Só não confunda o Chrome DevTools (do browser Google Chrome) com o DevTools do emulador Android… São coisas completamente diferentes.

A apresentação abaixo, no slide 6, mostra isso
http://www.slideshare.net/elias.nogueira/automatizando-uma-app-hbrida-66831023

Tenho até o exemplo no GitHub para que tu possa dar uma olhada…

@Elias-Nogueira olhei no github, me corrija se estiver errada, vc neste caso não utiliza o androiddriver, vc usa o driver web, é isso?

Na primeira parte usei o AndroidDriver, mas daqui para frente vou usar outro driver, é isso?

Consegui ver o inspect no chrome.

@Danúbia-Paiva O driver é o que vai, entre outras coisas, diferenciar a plataforma (Android e iOS), independente se for nativo ou híbrido.

O que vai realmente mudar no driver é o typecast do objeto, que é o que vai entre o símbolo de maior e menor.
Por exemplo:

  • Se tu usar uma aplicação nativa em Android, o typecast será para um MobileElement, porque tu vai querer interagir com elementos (componentes) mobile.

    AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement> .....
    
  • Se tu usar uma aplicação híbrida em Android, o typecast será para um WebElement, porque tu vai querer interagir com elementos web.

    AppiumDriver<MobileElement> driver = new AndroidDriver<MobileElement> .....
    

Tu podes usar duas abordagens em apps híbridas com o Appium no sentido de saber quando tu quer interagir com a plataforma e quando tu quer interagir com a webview

  1. No DesiredCapabilities colocar o AUTO_WEBVIEW que, automaticamente, vai entender que uma webview apareceu e dará o foco nela
    setCapability(MobileCapabilityType.AUTO_WEBVIEW, true);
    
  2. Informar ao Appium onde tu quer que ele dê foco. O padrão é sempre na parte nativa. Quando tu quiser “entrar” na webview tem que colocar o comando abaixo.
    driver.switchTo("WEBVIEW_")
    

Só uma observação: o texto “WEBVIEW_” no android sempre existe, mas depois dele, geralmente, vem o pacote completo da app.
Uma forma de pegar isso de forma dinâmica é explicado nesta página no Wiki do Appium
https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/hybrid.md

Abraço!

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.