Neste artigo, quero compartilhar minha experiência na solução do problema de iniciar o teste automatizado de um aplicativo móvel no Android.
O que vou dizer sobre:
- Como executar um ambiente de teste automatizado usando o Appium
 (PC OS - Windows 10)
- Como evitar alguns erros que ocorrem ao tentar executar testes em um aplicativo híbrido
- Alguns comandos básicos para executar os testes mais simples. Vamos usar Java e JavaScript
Desafio
Automatize o teste de aplicativos móveis híbridos.
Sobre o aplicativo a ser testado:
Talvez estes sejam os pontos principais que influenciaram a configuração do PC para executar os testes.
Ambiente de teste
Usaremos o Appium como uma ferramenta de teste automatizada.
Em resumo, esta é uma ferramenta que permite usar o servidor para enviar comandos ao cliente o que fazer e por quê.
Você pode obter informações completas no site 
do desenvolvedor .
Vamos começar.
Em um local conveniente para você no disco, crie a pasta “Appium automation”.
Por exemplo:
C:\Appium automation 
Mais adiante nesta pasta (C: \ Appium automation) crie mais algumas pastas:
Se algum dos aplicativos / componentes que você instalou, siga as instruções para entender a lógica do relacionamento, ou seja, não é necessário reinstalar tudo.
Preenchendo pastas criadas e carregando outros componentes
1. Java SDK
Siga o link e clique em Download:

Em seguida, chegamos à página de download de diferentes sistemas operacionais, como Eu tenho o Windows 10 x64, selecione:

Após baixar o arquivo, abra-o e descompacte o arquivo .exe-shnik (selecione o caminho durante a instalação) para a pasta:
 C:\Program Files\Java\jdk-12.0.1 
(o número da versão no momento do download pode variar)2. Android Studio e Android SDK
Para baixar, 
siga o link .
Instale na pasta:
 C:\Appium automation\Android Studio 
Durante o primeiro lançamento do Android Studio, você precisará 
configurar o programa :
- Tipo de instalação selecione Custom, clique em Next
- Escolha um tema que você gosta, clique em Avançar
- Local do SDK do Android, especifique C: \ Appium automation \ Android SDK, clique em Avançar
- As configurações do emulador podem ser deixadas em Recomendado, clique em Avançar
- Clique em Concluir e aguarde a conclusão do processo de instalação.
Crie um novo projeto no Android Studio:- Clique em Iniciar um novo projeto do Android Studio
- Indique o Nome, Caminho para o seu projeto ou você não pode alterar nada e deixar o proposto, clique em Avançar
- Na lista suspensa Telefone e tablet, selecione "API 23: Android 6.0 (Marshmallow), clique em Avançar.
- Escolha Atividade vazia, clique em Avançar
- Clique em Next
- Clique em Concluir
Instale as ferramentas do SDKNo Android Studio, selecione Ferramentas - Gerenciador de SDK.
Na janela exibida, a seção Android SDK será selecionada.

Na guia Plataformas SDK, selecione a versão do Android na qual você realizará os testes.
E, nas Ferramentas do SDK, selecione os itens:
- Ferramentas de compilação do SDK do Android
- Emulador Android
- Ferramentas da plataforma SDK para Android
- Ferramentas do SDK para Android
- Documentação para Android SDK
- Repositório de suporte
Clique em Aplicar ou Ok e aguarde o download e a instalação dos componentes para concluir.

3. Crie variáveis PATH
Clique com o botão direito do mouse em “Meu Computador” - “Propriedades” - “Configurações Avançadas do Sistema”.
Na janela que se abre, na guia "Avançado", selecione "Variáveis de ambiente ..."
No bloco "Variáveis do sistema", crie uma nova variável.

 Primeira variável
Primeira variávelNome da variável - JAVA_HOME
O valor da variável é
 C:\Program Files\Java\jdk-12.0.1 
(o caminho em que você instalou o jdk na etapa 1, em alguns casos, pode ser que a pasta Arquivos de Programas seja chamada Arquivos de Programas (x86))
Segunda variávelNome da variável - ANDROID_HOME
O valor da variável é
 C:\Appium automation\Android SDK 
Adição de variável de caminhoEncontre a variável Path na lista de variáveis do sistema e clique em "Change ...".
Clique em "Criar" na janela que aparece e adicione as variáveis:
- % ANDROID_HOME% \ emulador
- % ANDROID_HOME% \ ferramentas da plataforma
- % ANDROID_HOME% \ tools
- % ANDROID_HOME% \ tools \ bin
Como resultado, você deve obter 4 novas variáveis, após as quais precisa clicar em OK.

4. Appium
Download Appium:- Seguimos o link http://appium.io/
- Clique em Download
- Selecionamos Appium-windows-1.13.0.exe (o número da versão no momento do carregamento pode variar)

Execute o arquivo .exe baixado e instale o Appium no seu PC. Durante o processo de instalação, você precisará escolher instalar globalmente ou para um usuário específico. Eu instalei globalmente desde isso não importa para mim.
Fazendo o download das bibliotecas do Appium:
Mova o arquivo .jar baixado para a pasta
 C:\Appium automation\Appium Lib 

Mova o arquivo .jar baixado para a pasta:
 C:\Appium automation\Appium Lib 

Mova o arquivo .jar baixado para a pasta:
 C:\Appium automation\Appium Lib 
Faça o download das bibliotecas do Selenium:
Descompacte o arquivo baixado na pasta:
 C:\Appium automation\Selenium Lib 
5. IntelliJ IDEA Community Edition
Para fazer o download, acesse o link 
https://www.jetbrains.com/idea/downloadPróximo à versão Community e clique em Download (esta é uma versão gratuita, mas é suficiente para testes automáticos).
A página de download tem uma comparação das versões Community e Ultimate.
Se você deseja comprar a versão Ultimate, pode fazê-lo com segurança! Mas, mais uma vez, a versão comunitária será suficiente.
Execute o arquivo .exe baixado e instale (basta clicar em Avançar até o programa iniciar a instalação)
Primeiro lançamento do IntelliJ IDEA- Selecione "Não importar configurações"
- Aceitamos o contrato de licença
- Escolha um tópico
- Clique em Next
- Clique em Iniciar usando o IntelliJ IDEA
Criando um projeto no IntelliJ IDEA- Escolha Criar novo projeto
- Especifique o caminho para o Java SDK
 - Clique em Novo ...
- Especifique o caminho para o Java SDK C carregado anteriormente: \ Arquivos de Programas \ Java \ jdk-12.0.1
 
- Clique em Next
- Marque a caixa "Criar projeto a partir do modelo"
- Clique em Next
- Especifique o nome e o local do projeto para salvar
- Clique em Concluir
Configurações para o projeto criadoEscolha Arquivo - Estrutura do projeto ...
Na janela exibida, selecione Módulos - Dependências - “+” - JARs ou diretórios ...

E adicionamos ao projeto todas as bibliotecas carregadas anteriormente.

Clique em OK
Agora o projeto está pronto para executar testes.
6. configuração do dispositivo Android
Dispositivo realVocê precisa de um cabo USB para conectar o dispositivo ao computador e ao próprio smartphone.
Para começar, vá para "Configurações" - "Sobre o telefone" no smartphone.
Além disso, em smartphones diferentes, tudo é diferente, mas o essencial é que você precisa encontrar o “Número de série” e clicar nele 5-7 vezes até que a torradeira apareça “Agora você é um desenvolvedor” (o texto da notificação pode ser diferente de modelo para modelo)
Após essa manipulação, a seção "Para desenvolvedores" aparecerá nas configurações do seu telefone. Também pode ocultar de modelo para modelo em seções diferentes, por exemplo, em algum lugar em "Configurações" - "Para desenvolvedores" e em algum lugar em "Configurações" - "Recursos especiais" - "Para desenvolvedores" etc. .
Você precisa ir para a seção "Para desenvolvedores" e ativar a "Depuração USB".
Ao conectar seu smartphone via USB, você verá uma mensagem sobre a permissão de depuração USB, pode marcar “Confiar neste dispositivo” e clicar em “OK”; essa mensagem não aparecerá novamente na próxima vez que o telefone for conectado a este PC.
Todo o seu smartphone está pronto para funcionar em testes automáticos.
Dispositivo virtualVocê também pode criar um dispositivo virtual através do Android Studio e não precisará conectar o dispositivo real ao computador.
Mas em um dispositivo virtual, os testes podem funcionar mais lentamente do que em um dispositivo real.
Para criá-lo, abra o Android Studio e, em seguida:
- “Ferramentas” - “AVD Manager” - “+ Criar dispositivo virtual ...”
- Escolha um dispositivo, clique em Avançar
- Escolha a versão desejada do Android, clique em Avançar
- Especifique o nome do dispositivo, clique em Concluir
Após as manipulações feitas na seção “Ferramentas” - “AVD Manager”, você verá o dispositivo criado. Usando o ícone verde "Play", você pode iniciar o dispositivo.
Como verificar se o seu PC viu o dispositivo conectado?Execute a linha de comando (“Iniciar” - “Utilitários - Windows” - “Prompt de Comando”)
E insira o comando adb devices.
Como resultado, se o dispositivo estiver conectado com a função “USB Debugging” ativada, você receberá o dispositivo conectado e seu UDID (número de série):
 List of devices attached UDID device 
7. Estamos escrevendo um projeto
Adicionar importação. package name; import java.util.*; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.JavascriptExecutor; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; 
Registramos o servidor e para onde ele deverá enviar solicitaçõesInstale o driver Android:
 AndroidDriver<AndroidElement> driver = null; 
Definimos os parâmetros (propriedades):
 DesiredCapabilities capabilities = new DesiredCapabilities(); 
O nome do dispositivo (você pode encontrá-lo para o dispositivo real em "Configurações" - "Sobre o telefone" e para o virtual "Ferramentas" - "AVD Manager" - o campo "Nome"):
 capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "MyPhone"); 
Link para o APK que precisará ser iniciado (.apk deve ser uma compilação de depuração para que você e o appium possam inspecionar aplicativos):
 capabilities.setCapability(MobileCapabilityType.APP, "C:\\Appium automation\\APK\\My-debug-Apk.apk"); 
Inicie o Appium Driver:
 try { driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } catch (MalformedURLException e) { System.out.println(e.getMessage()); } 
Este código será suficiente para iniciar seu aplicativo no dispositivo conectado.
Equipes adicionaisPara suspender o projeto por um determinado período de tempo, por exemplo, 8 segundos. (o valor é indicado em milissegundos). Pode ser necessário se você precisar esperar a página ou o aplicativo carregar:
 Thread.sleep(8000); 
Temos o ContextHandles, onde entendemos com o que estamos trabalhando agora (NATIVE_APP ou WEBVIEW):
 Set<String> contextNames = driver.getContextHandles(); for (String contextName : contextNames) { System.out.println(contextName); } 
Atribua contexto ao último valor recebido na matriz. Isso permitirá que você alterne corretamente para WEBVIEW, tk. Contexto padrão = NATIVE_APP:
 driver.context((String) contextNames.toArray()[contextNames.toArray().length - 1]); 
Nós controlamos a interface do aplicativoPorque estamos trabalhando com um aplicativo híbrido, ou seja, elementos de aplicativo são renderizados em WEBVIEW, e não em NATIVE_APP, na maioria das vezes teremos que usar um tipo de pesquisa para o elemento findElementByCssSelector.
Clique no botão OK:
 driver.findElementByCssSelector(".button-ok").click(); 
- onde .button-ok é a classe do elemento. Você também pode usar o ID do elemento exatamente.
Enviamos o valor no campo, por exemplo, você tem uma pesquisa e deseja enviar o valor "Cinema" para lá.
 driver.findElementByCssSelector(".search-input").sendKeys(""); 
Clique para encontrar:
 driver.findElementByCssSelector(".search-button").click(); 
Dessa forma, você já pode controlar seu aplicativo.
Mais cedo ou mais tarde, você descobrirá que nem todo o conteúdo é colocado na tela do smartphone, ou seja, você precisa rolar. Se um elemento não estiver visível na tela durante o processo de teste, o Appium emitirá um erro que não vê o elemento e, provavelmente, todos os testes adicionais serão cobertos por erros.
Para rolar na tela, você pode executar a função JS scrollIntoView em Java.
 ((JavascriptExecutor) driver).executeScript("document.querySelector('.button-ok').scrollIntoView({block: \"end\", behavior: \"smooth\"});"); 
No meu caso, isso permitirá que você desça para o botão OK.
Pode ser um incidente que você meio que escreveu tudo corretamente, mas a rolagem não é executada.
Tente vincular-se a outros elementos na tela e, primeiro, é melhor fazer isso por meio do console no Chrome - Inspecione, para garantir que você entenda que, quando vincular a esse elemento, a rolagem funcionará.
Você pode ir para a etapa 8 e, se tudo funcionar para você, isso é ótimo!
Mas eu tive outra armadilha.
O nome dele é Crosswalk Browser.
Quando iniciei o projeto, constantemente cometi um erro:
 “Make sure the app has its webview configured for debugging” 
Isso significa que não foi realizado nenhum teste.
O que você precisa verificar neste caso:
- verifique se você tem uma compilação de depuração
- verifique se a compilação de depuração permite que o Inspect-a application
- instalar chromedriver fixo
 
Após essas manipulações, adicione outros recursos ao seu projeto.
 capabilities.setCapability("chromedriverExecutable", "C:\\node_modules\\appium-with-crosswalk-fix\\chromedriver\\2.28\\chromedriver.exe"); 
- em que C: \\ node_modules \\ appium-crosswalk-fix \\ chromedriver \\ 2,28 \\ chromedriver.exe
este é o caminho para o chromedriver fixo
Portanto, seu projeto ficará assim: package name; import java.util.*; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.remote.MobileCapabilityType; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.JavascriptExecutor; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { AndroidDriver<AndroidElement> driver = null; DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "MyPhone"); capabilities.setCapability(MobileCapabilityType.APP, "C:\\Appium automation\\APK\\My-debug-apk.apk"); capabilities.setCapability("chromedriverExecutable", "C:\\node_modules\\appium-with-crosswalk-fix\\chromedriver\\2.28\\chromedriver.exe"); try { driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } catch (MalformedURLException e) { System.out.println(e.getMessage()); } Set<String> contextNames = driver.getContextHandles(); for (String contextName : contextNames) { System.out.println(contextName); } driver.context((String) contextNames.toArray()[contextNames.toArray().length - 1]); Thread.sleep(8000); driver.findElementByCssSelector(".search-input").sendKeys(""); driver.findElementByCssSelector(".search-button").click(); } 
Tal projeto:
- Instale seu aplicativo no dispositivo.
- Encontre o campo de pesquisa na página do aplicativo
- Trará lá o significado de "Cinema"
- Clique no botão "Pesquisar"
8. Começamos o projeto
Existem vários pontos principais para um projeto iniciar:
- Iniciar servidor Appium (item 4)
 - Use o atalho para iniciar o Appium
- Clique em "Iniciar servidor"
 
- Conecte o dispositivo a um PC ou inicie um dispositivo virtual (item 6)
- Monte um projeto (p. 5 e p. 7)
- Clique em Executar (ou na barra de ferramentas do IntelliJ IDEA ou em Executar - Executar 'Principal')
- Aprecie o resultado
Bem, então você está livre para testar as configurações, as informações necessárias estão no site oficial do 
desenvolvedor .
O Appium também pode ser usado para testar aplicativos iOS.
Eu queria escrever brevemente, mas acabou como sempre.
Obrigado a todos que leram até o final, espero que tenha sido útil para você!