Projeto de automação de testes para aplicações Android utilizando WebdriverIO e Appium, seguindo o padrão Page Object Model (POM) para testes de interface com melhor organização e manutenibilidade do código.
Este é um framework de testes automatizados para validar funcionalidades de uma aplicação Android nativa/híbrida. O projeto utiliza:
- WebdriverIO: Framework de automação web/mobile baseado em JavaScript
- Appium: Servidor de automação para aplicações mobile
- Mocha: Framework de testes
- Page Object Model: Padrão de design para estruturar testes
teste-wdio-android/
├── app/
│ └── wdio.apk # Aplicação Android a testar
├── chromedriver-mobile/ # ChromeDriver para testes em navegador
├── test/
│ ├── pageobjects/ # Page Objects (estrutura dos elementos)
│ │ ├── drag.page.js
│ │ ├── forms.page.js
│ │ ├── login.page.js
│ │ └── swipe.page.js
│ └── specs/ # Testes (casos de teste)
│ ├── drag.spec.js
│ ├── forms.spec.js
│ ├── login.spec.js
│ └── swipe.spec.js
├── wdio.conf.js # Configuração principal do WebdriverIO
├── jsconfig.json # Configuração JavaScript
└── package.json # Dependências do projeto
Antes de começar, certifique-se de ter instalado:
- Node.js (v14 ou superior) - Download
- npm (incluído com Node.js)
- Appium (v2.x) - Será instalado como dependência
- Java Development Kit (JDK) - Para executar Appium/Android
- Android SDK - Para emulador ou dispositivo real
- Android Studio (recomendado) - Para configurar emulador
node --version
npm --versiongit clone https://github.com/EBAC-QE/teste-wdio-android.git
cd teste-wdio-androidnpm installIsto instalará:
@wdio/cli- Interface de linha de comando@wdio/local-runner- Executor local@wdio/mocha-framework- Framework Mocha@wdio/appium-service- Serviço Appium@wdio/spec-reporter- Reporter de relatóriosappium-uiautomator2-driver- Driver de automação Android
Usando Emulador Android:
- Abra Android Studio
- Crie ou inicie um dispositivo virtual
- Certifique-se de que o dispositivo está rodando
Usando Dispositivo Real:
- Ative "Depuração USB" nas configurações do dispositivo
- Conecte via cabo USB
- Verifique a conexão:
adb devicesA aplicação wdio.apk já está incluída na pasta app/. A configuração no wdio.conf.js referencia este arquivo.
npm testOu:
npx wdio run ./wdio.conf.jsnpm test -- --spec ./test/specs/login.spec.jsOu:
npx wdio run ./wdio.conf.js --spec ./test/specs/login.spec.js| Teste | Arquivo | Descrição |
|---|---|---|
| Login | test/specs/login.spec.js |
Valida funcionalidades de login |
| Formulários | test/specs/forms.spec.js |
Testa preenchimento de formulários |
| Drag & Drop | test/specs/drag.spec.js |
Testa ações de arrastar e soltar |
| Swipe | test/specs/swipe.spec.js |
Testa gestos de deslize |
Este projeto segue o padrão Page Object Model, que organiza os testes em duas camadas:
Contêm:
- Localizadores (seletores) dos elementos da página
- Métodos que representam ações do usuário
Exemplo - login.page.js:
class LoginPage {
get emailInput() { return $('~email'); }
get passwordInput() { return $('~password'); }
get loginButton() { return $('~login'); }
async login(email, password) {
await this.emailInput.setValue(email);
await this.passwordInput.setValue(password);
await this.loginButton.click();
}
}Contêm:
- Casos de teste (describe/it)
- Assertions e validações
- Fluxos de usuário
Exemplo - login.spec.js:
import LoginPage from '../pageobjects/login.page.js';
describe('Login Tests', () => {
it('should login with valid credentials', async () => {
await LoginPage.login('user@example.com', 'password123');
expect(await LoginPage.successMessage).toBeDisplayed();
});
});✅ Manutenibilidade: Alterações de UI em um único lugar
✅ Reutilização: Métodos compartilhados entre testes
✅ Legibilidade: Testes mais claros e descritivos
✅ Escalabilidade: Fácil adicionar novos testes
O arquivo wdio.conf.js contém a configuração principal:
// Capabilities - Configuração do dispositivo/emulador
capabilities: [{
platformName: "Android",
deviceName: "Medium Phone", // Nome do emulador
automationName: "uiautomator2", // Driver de automação
app: "app/wdio.apk", // Caminho do APK
platformVersion: "9.0" // Versão do Android
}]
// Timeout padrão para operações
waitforTimeout: 10000
// Service Appium
services: ['appium']
// Port do Appium
port: 4723Mudar Dispositivo:
Edite capabilities.deviceName para o seu emulador
Aumentar Timeout:
Modifique waitforTimeout (em ms)
Usar Dispositivo Real:
Certifique-se que o dispositivo está conectado e listado em adb devices
Após executar os testes, um relatório será gerado. Os resultados podem ser visualizados no console.
# Inicie o Appium manualmente
npx appium# Verifique dispositivos conectados
adb devices
# Se não aparecer, reconecte o cabo ou reinicie o emulador- Aumente
waitforTimeoutemwdio.conf.js - Verifique se o emulador/dispositivo está responsivo
- Verifique se o APK está instalado corretamente
- Verifique os seletores (accessibility IDs) nos page objects
- Use ferramentas como Appium Inspector para inspecionar elementos
- Certifique-se de que a aplicação está carregada
- WebdriverIO Documentation
- Appium Documentation
- Mocha Framework
- Page Object Model Pattern
- Android SDK Documentation
Desenvolvido ppor Fábio Araújo Professor de Engenharia de Qualidade na EBAC Linkedin: https://www.linkedin.com/in/fabio10/
Este projeto é fornecido como está para fins educacionais.