Este repositório apresenta uma arquitetura de testes automatizados móveis robusta, corporativa e de alta performance voltada especificamente à plataforma nativa iOS. O projeto implementa de forma rigorosa o padrão de design estrutural Page Object Model (POM), garantindo o desacoplamento absoluto de seletores de interface, manutenibilidade ágil de scripts e mitigação sistemática de testes intermitentes (test flakiness) por meio de esperas lógicas e drivers isolados.
Toda a engenharia de qualidade aplicada neste ecossistema de código segue preceitos, documentações formais e artefatos de validação de software com o mesmo rigor metodológico exigido em laboratórios acadêmicos avançados de P&D (Pesquisa e Desenvolvimento).
O código-fonte deste projeto foi projetado utilizando separação rígida de responsabilidades em camadas lógicas:
br.com.davi.core: Camada de infraestrutura e controle. Abstrai e gerencia de forma centralizada o ciclo de vida e inicialização estável do driver Appium (DriverFactory), encapsulando os ganchos de setup (@BeforeMethod) e encerramento seguro (@AfterMethod) para evitar vazamentos de memória e travamentos de sessão no Xcode.br.com.davi.pages: Camada de representação gráfica. Encapsula estritamente a identidade dos componentes de interface (mapeados unicamente via chaves de acessibilidade) e as ações lógicas de cada tela (Page Objects). Esta camada blinda os scripts de teste contra mudanças futuras de layout.br.com.davi.tests: Camada de negócios e validação. Contém os scripts puros de asserção funcional orquestrados sob a engine do TestNG. Nenhum arquivo desta pasta manipula seletores ou interações brutas de clique direta.
O ecossistema foi projetado, validado e estressado localmente sob a seguinte infraestrutura de hardware e software corporativa:
- Arquitetura de Hardware: Mac Mini (Apple Silicon / Linha M-Series).
- Sistema Operacional: macOS Sequoia 15.6.1 ou superior.
- IDEs Utilizadas: IntelliJ IDEA (desenvolvimento Java e gestão Maven) & Xcode (simuladores Apple e inspeção XCUITest).
- Gerenciador de Dependências: Apache Maven.
- Target Application: TheApp (by Appium Foundation) - Binário executável nativo simulado em iOS.
Siga rigorosamente os comandos e passos abaixo na sua máquina local para preparar as variáveis do sistema e as engines de simulação necessárias para a execução bem-sucedida do projeto.
O Xcode fornece as ferramentas de compilação gráfica nativas da Apple e o servidor de simulação de dispositivos para o sistema.
- Acesse a App Store oficial do seu macOS e realize o download/instalação do Xcode.
- Se o instalador apontar incompatibilidade, acesse System Settings ➔ Software Update e garanta que o seu sistema operacional esteja atualizado na versão mais recente permitida.
- Abra o Xcode pela primeira vez após o download para aceitar os termos de licença de uso do desenvolvedor e aguarde o download automático dos pacotes e runtimes adicionais do simulador da plataforma (Exemplo utilizado: iOS 18.6 Simulator).
- Para certificar-se de que a engine de simulação está respondendo sem travas no sistema, execute no terminal do seu Mac:
open -a Simulator
O Homebrew gerencia ferramentas e dependências de ambiente via linha de comando no macOS.
- Abra o terminal do Mac e cole o script de instalação oficial abaixo:
/bin/bash -c "\$(curl -fsSL https://githubusercontent.com)" - Após o término da instalação, você obrigatoriamente precisa injetar o Homebrew no perfil global do seu terminal para que o comando fique disponível. Execute os três comandos abaixo em sequência (Substitua
<seu-usuario>pelo nome da sua pasta de usuário do Mac):echo >> /Users/<seu-usuario>/.zprofile echo 'eval "\$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<seu-usuario>/.zprofile eval "\$(/opt/homebrew/bin/brew shellenv)"
- Teste se a instalação foi bem-sucedida rodando:
brew --version
O servidor central do Appium opera sobre uma base baseada em Node.js. O uso do NVM (Node Version Manager) previne conflitos de permissões no escopo de diretórios globais do Mac.
- Instale o utilitário do NVM utilizando o Homebrew instalado no passo anterior:
brew install nvm
- Crie o diretório físico oculto de persistência do NVM e injete as variáveis de leitura no seu ambiente terminal rodando:
mkdir ~/.nvm export NVM_DIR="\$HOME/.nvm" [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
- Verifique se o utilitário responde com a versão corrente:
nvm -v
- Realize o download da versão estável LTS (Long-Term Support) do Node.js e amarre-a como o interpretador padrão global do sistema:
nvm install --lts nvm alias default 'lts/*'
- Valide se tanto o interpretador Node quanto o gerenciador de pacotes NPM estão devidamente indexados no sistema executando:
node -v # Deve retornar v22.x ou superior npm -v # Deve retornar v10.x ou superior
Com o ecossistema do Node.js/NPM devidamente isolado pelo NVM, podemos instalar o ecossistema de servidores do Appium sem o uso de comandos administrativos arriscados (evitando o uso de sudo).
- Instale o servidor do Appium de forma global no sistema através do gerenciador de pacotes do Node:
npm install -g appium
- Após o término do download, confirme se os binários de orquestração do servidor foram indexados no sistema operacional rodando:
appium -v
- O Appium opera em uma arquitetura modularizada, exigindo drivers específicos para interagir com cada sistema operacional. Realize a instalação do driver nativo XCUITest para comunicação direta com os simuladores e SDKs da Apple:
appium driver install xcuitest
- Confirme se o driver foi registrado corretamente na sua máquina local executando o comando de listagem:
appium driver list --installed
Para que o driver do Appium (XCUITest) opere em conformidade com os simuladores Apple e consiga injetar scripts sem travas lógicas, o sistema operacional necessita de utilitários gráficos adicionais fornecidos via Homebrew.
- Instale o utilitário Carthage (gerenciador de dependências nativo que compila frameworks para iOS), o pacote FFmpeg (utilizado pelo Appium para captura de tela e gravação de vídeo das sessões de testes móveis em tempo real) e as ferramentas de build básicas:
brew install carthage ffmpeg
- Instale o pacote utilitário de manipulação avançada de simuladores Apple mantido pela Wix (AppleSimUtils). Ele permite ao driver do Appium realizar o controle e boot dinâmico do simulador Xcode em segundo plano:
brew tap wix/brew brew install applesimutils
Para assegurar de forma visual que nenhuma variável ou atalho do sistema operacional ficou quebrado, usamos a ferramenta oficial de auditoria de ambiente.
- Instale o pacote de diagnóstico global oficial da comunidade Appium:
npm install -g @appium/doctor
- Execute a validação estrita focando nas dependências da infraestrutura da plataforma Apple:
appium-doctor --ios
- Certifique-se de que os itens críticos de ambiente da seção iOS (como caminhos do Xcode, Xcode Command Line Tools e Homebrew) retornem com o ícone de sucesso verde. Caso algum item aponte falha, o próprio console exibirá a linha de comando exata necessária para a correção.
O ecossistema Java requer a injeção explícita da variável de caminho global JAVA_HOME mapeando a raiz do OpenJDK para que o compilador Maven e a IDE consigam localizar as classes internas do projeto. No macOS Sequoia rodando em arquiteturas Apple Silicon, esse mapeamento deve ser feito no terminal Zsh.
- Instale a distribuição oficial do OpenJDK 17 na sua máquina local através do Homebrew:
brew install openjdk@17
- Crie um link simbólico no sistema para permitir que o macOS reconheça essa versão instalada como um pacote de máquina virtual Java nativo padrão do sistema:
sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
- Abra ou crie o arquivo de perfil do seu terminal em modo de edição de texto limpo para persistir as variáveis globais (use o editor integrado Nano):
nano ~/.zshrc - Navegue até o fim do arquivo aberto no terminal e cole exatamente as linhas abaixo. Elas usam um script utilitário interno da Apple (
/usr/libexec/java_home) para identificar dinamicamente onde o OpenJDK 17 foi instalado na máquina e configuram o Maven Wrapper:# Configurações Globais de Variáveis de Ambiente Java e Maven export JAVA_HOME=\$(/usr/libexec/java_home -v 17) export M2_HOME=\$HOME/.m2 export PATH=\(JAVA_HOME/bin:\)PATH
- Salve as alterações e feche o editor Nano teclando sequencialmente os atalhos de teclado:
Ctrl + O(para gravar),Enter(para confirmar o nome do arquivo) eCtrl + X(para sair do editor). - Recarregue os scripts de ambiente do seu terminal atual na memória viva do sistema operacional sem precisar fechar a janela rodando:
source ~/.zshrc
- Valide se a variável global está apontando para o endereço absoluto correto do OpenJDK executando:
echo \$JAVA_HOME
- Certifique-se de que o interpretador do Java e o compilador do Java respondam com a versão correta instalada digitando:
java -version javac -version
Para realizar a engenharia reversa das telas e capturar as chaves de acessibilidade únicas (Accessibility IDs) dos elementos, utilizamos a interface gráfica do Appium Inspector de forma integrada com as capabilities modernas do Appium 2.x/3.x.
- Baixe e instale a versão mais recente do Appium Inspector para macOS.
- Inicie o servidor do Appium no terminal do seu Mac rodando o comando:
appium
- Abra o aplicativo Appium Inspector na sua máquina.
- Na aba principal Desired Capabilities, procure pelo botão de alternância chamado JSON Representation (localizado logo acima do painel de chaves/valores) e cole exatamente o objeto estruturado abaixo.
(Nota: Lembre-se de substituir a propriedade
apppara refletir o caminho absoluto onde o seu repositório local foi clonado na sua máquina):{ "platformName": "iOS", "appium:automationName": "XCUITest", "appium:deviceName": "iPhone 16 Pro", "appium:platformVersion": "18.6", "appium:app": "/Users/<seu-usuario>/Desktop/appium-java-mobile-testing-architecture/apps/TheApp.app.zip", "appium:noReset": false } - Clique no ícone de salvar (disquete) para reter esse template e, em seguida, clique no botão Start Session no canto inferior direito.
- O simulador do Xcode receberá a ordem de boot, abrirá o iPhone 16 Pro e carregará o binário do TheApp. A partir deste momento, você pode clicar em qualquer elemento gráfico na tela espelhada do Inspector para visualizar e copiar seus atributos nativos na barra lateral direita.
Toda a suíte de testes pode ser disparada de forma limpa e automática via terminal sem a necessidade de configurações manuais adicionais dentro da IDE, fazendo uso exclusivo do script utilitário do Maven Wrapper contido na raiz do projeto.
Antes de iniciar uma nova rodada de validação, limpe os rastros de compilações anteriores e valide a consistência das dependências injetadas executando:
./mvnw clean test-compile(Nota: Caso o terminal do seu macOS aponte um erro de "Permission denied" ao tentar invocar o wrapper, conceda permissão de execução ao script executando o comando chmod +x mvnw e tente novamente).
Certifique-se de que o servidor do Appium está ativo no terminal (appium) e que o simulador do Xcode está aberto na sua tela. Em seguida, execute a ordem de disparo da suíte orquestrada pelo TestNG:
./mvnw testAo final do processo, o terminal exibirá o sumário completo de execução do TestNG (Passes: 1, Failures: 0, Skips: 0), garantindo a rastreabilidade e integridade da sua entrega.
Para compreender profundamente a modelagem científica de escopo, as equações de cobertura funcional de negócios e os métodos aplicados para mitigar as instabilidades de rede e hardware sob este ecossistema, consulte os documentos em Markdown detalhados localizados na pasta /docs:
- ➡️ Plano de Testes Master (IEEE 829 Adaptado): Estrutura formal contendo o mapeamento detalhado de escopo executivo, critérios de entrada/saída, arquitetura de software e a matriz viva de gerenciamento de riscos de QA.
- ➡️ Especificação de Casos de Teste (BDD / Gherkin): Modelagem semântica e rastreável de cenários comportamentais utilizando a linguagem ubíqua e interpretável Gherkin (Given-When-Then).
