Appium é um framework multiplataforma para automatizar testes de aplicações móveis, web e desktop, baseado no protocolo WebDriver. Permite escrever testes em qualquer linguagem de programação e executá-los no Android, iOS e Windows sem alterar o código. De acordo com a Appium Foundation, 2025, o protocolo WebDriver fornece uma interface unificada para interagir com aplicações em diferentes plataformas.
Principais pontos
Appium é um framework de código aberto para automatizar testes de aplicações móveis, construído sobre uma arquitetura cliente-servidor. O servidor Appium recebe comandos do cliente através do protocolo WebDriver e os delega a drivers nativos: XCUITest para iOS, UiAutomator2 para Android e WinAppDriver para Windows.
Appium foi criado em 2013 e desde então se tornou o padrão da indústria para testes multiplataforma. O projeto é gerido pela Appium Foundation e apoiado por grandes empresas: Sauce Labs, HeadSpin, Microsoft. Appium é usado por mais de 500 mil testadores em todo o mundo todos os meses.
Appium suporta três tipos de aplicações: nativas (iOS, Android, Windows), navegadores web móveis (Safari, Chrome) e aplicações híbridas (WebView dentro de um shell nativo). Cada tipo usa seu próprio contexto: NATIVE_APP, WEBVIEW ou CHROMIUM.
A arquitetura do Appium consiste em quatro camadas: código do cliente → Appium Client Library → Appium Server → driver nativo. A biblioteca cliente implementa o protocolo WebDriver e envia requisições HTTP ao servidor. O servidor as converte em comandos do driver nativo da plataforma.
WebDriver é um padrão W3C para automação de navegadores, adaptado pelo Appium para dispositivos móveis. Cada ação — busca de elemento, toque, entrada de texto — é enviada como uma requisição HTTP ao servidor. Por exemplo, POST /session/{id}/element cria uma nova sessão de teste.
Cada teste começa criando uma sessão através do objeto Desired Capabilities. Ele especifica: platformName, deviceName, appPath, automationName e parâmetros adicionais. Appium usa estes dados para selecionar o driver nativo apropriado e a configuração do dispositivo.
# Exemplo de Desired Capabilities para Android
desired_caps = {
'platformName': 'Android',
'deviceName': 'Pixel_4',
'app': '/path/to/app.apk',
'automationName': 'UiAutomator2',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
Appium é instalado via npm: npm install -g appium. Após a instalação, é necessário configurar os drivers nativos para cada plataforma: appium driver install xcuitest e appium driver install uiautomator2. Xcode é necessário para iOS e Android SDK para Android.
Appium Inspector é uma ferramenta gráfica para inspecionar elementos da interface do utilizador. Ele conecta-se a um servidor Appium em execução e mostra a hierarquia dos componentes da interface, seus atributos e localizadores. O Inspector permite verificar um seletor antes de escrever um teste.
O servidor Appium é iniciado com o comando appium com parâmetros opcionais: porta, endereço, registro. Por padrão, o servidor escuta na porta 4723. Portas diferentes ou clusters Appium são usados para execução paralela em múltiplos dispositivos.
# Iniciando o servidor Appium com registro
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Os testes Appium usam o padrão Page Object para organizar o código. Cada ecrã da aplicação é descrito por uma classe separada com localizadores de elementos e métodos de interação. O Page Object Model simplifica a manutenção dos testes quando a interface muda e reutiliza seletores entre cenários de teste.
Appium suporta muitas estratégias de busca de elementos: id, xpath, accessibilityId, className, androidUIAutomator e iOSClassChain. Os mais preferidos são accessibilityId e id — eles são estáveis apesar de mudanças no layout. XPath deve ser usado apenas quando outros localizadores não estão disponíveis.
// Page Object para o ecrã de login
public class LoginPage {
private AppiumDriver driver;
private MobileElement emailField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("emailInput"));
private MobileElement passwordField =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("passwordInput"));
private MobileElement loginButton =
(MobileElement) driver.findElement(MobileBy.AccessibilityId("loginButton"));
public void login(String email, String password) {
emailField.sendKeys(email);
passwordField.sendKeys(password);
loginButton.click();
}
}
Appium suporta gestos complexos através da classe TouchAction ou da API W3C Actions: deslizes, multitoque, pressões longas, scroll para elemento. A nova API W3C Actions é recomendada para novos projetos, pois é padronizada e funciona de forma mais estável em diferentes versões de plataformas.
Appium é frequentemente comparado com Detox, XCUITest e Espresso. A principal vantagem do Appium é a capacidade multiplataforma: um teste pode ser executado no iOS e Android sem alterações. No entanto, o Detox oferece melhor sincronização para React Native, e o XCUITest/Espresso oferecem execução mais rápida para testes nativos.
Appium é adequado para projetos que requerem um framework único para iOS, Android e web. É indispensável em equipas com testadores que escrevem em Java ou Python. Para projetos React Native com muitos testes E2E, considere o Detox devido à sincronização automática.
| Framework | Abordagem | Velocidade | Multiplataforma |
|---|---|---|---|
| Appium | Black-box | Média | iOS, Android, Windows |
| Detox | Gray-box | Alta | iOS + Android (React Native) |
| XCUITest | White-box | Alta | Apenas iOS |
Appium Grid é uma extensão para executar testes em paralelo em múltiplos dispositivos simultaneamente. Appium Grid é construído sobre o Selenium Grid e permite distribuir testes entre vários servidores Appium, cada um gerenciando seu próprio conjunto de dispositivos ou emuladores. Isto é crítico para grandes projetos onde o teste de regressão num único dispositivo leva horas — o Grid reduz o tempo para minutos proporcional ao número de nós.
A configuração do Grid usa um arquivo de configuração JSON que descreve nós com dispositivos. Cada nó especifica: porta do servidor, lista de dispositivos com plataforma, versão do SO e número máximo de sessões. O Hub distribui testes pelos nós livres, garantindo a máxima utilização da infraestrutura.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Se a sua própria infraestrutura de dispositivos não estiver disponível, existem serviços em nuvem: Sauce Labs, BrowserStack, LambdaTest. Eles fornecem centenas de dispositivos reais e emuladores na nuvem. A integração com Appium é mínima: basta especificar o URL do hub na nuvem e as credenciais nas Desired Capabilities em vez de localhost.
Appium suporta execução paralela de testes usando TestNG (Java) ou pytest-xdist (Python). A paralelização requer portas únicas para cada sessão e dados de teste isolados. Cada thread inicia sua própria sessão Appium num dispositivo ou emulador separado. Ao usar serviços em nuvem, a paralelização é automática — a plataforma distribui testes pelos dispositivos disponíveis e liberta-os após a conclusão.
Ao encontrar problemas com o Appium, o primeiro passo é verificar o registo do servidor (appium --log-level debug). Erros típicos: porta ocupada (especifique outra --port), versão de driver incompatível, falta de Android SDK ou Xcode. Para iOS, certifique-se de que o WebKitAgent está em execução e tem acesso ao simulador.
Se o Appium não encontrar um elemento, verifique: se o contexto está correto (NATIVE_APP vs WEBVIEW), se o elemento está visível no ecrã, se requer scroll e se o localizador está correto. Use o Appium Inspector para busca interativa e verificação de expressões XPath antes de inseri-las no teste. Também é útil ativar a espera pela visibilidade do elemento através do WebDriverWait — isto resolve problemas de sincronização com carregamento lento da interface.
A terminação incorreta de sessões é uma causa comum de instabilidade nos testes Appium. Feche sempre o driver num bloco finally ou através de AutoCloseable. Em caso de falhas, use driver.quit() de forma forçada. Para iOS, certifique-se de que o WebKitAgent (WDA) reinicia entre sessões, caso contrário, pode ocorrer um erro de sessão não criada. Para monitorizar o estado das sessões em CI, é conveniente conectar o plugin Appium Dashboard, que visualiza o estado de todos os testes em execução em tempo real.
Para melhorar a estabilidade dos testes, use: shouldTerminateApp (finalizar app entre testes), noReset (preservar dados entre sessões), autoGrantPermissions (permitir automaticamente diálogos do sistema). Também é recomendado desativar animações no dispositivo através das Opções de Programador.
Perguntas frequentes
Appium suporta todas as linguagens populares através de bibliotecas cliente: Java, Python, JavaScript, Ruby, C#, PHP e Kotlin. Cada biblioteca implementa o mesmo protocolo WebDriver, permitindo escrever testes multiplataforma em qualquer linguagem.
Não, o Appium funciona tanto com dispositivos reais como com emuladores e simuladores. Para Android são usados emuladores do Android Studio, para iOS, simuladores do Xcode. Dispositivos reais são necessários apenas para testar funções de hardware: sensores, NFC, câmara.
Appium 2 foi completamente reescrito com uma arquitetura modular com plugins e drivers separados. No Appium 1, todos os drivers estavam incorporados no servidor. Appium 2 usa comandos appium driver install para instalar drivers e appium plugin install para plugins.
Appium usa estratégias de busca: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator e By.iOSClassChain. Para velocidade, recomenda-se usar accessibilityId — é estável e não depende de alterações no layout.
Sim, Appium suporta testes de navegadores móveis — Safari no iOS e Chrome no Android. Para isso, usa-se o contexto WEBVIEW ou CHROMIUM. Os testes são executados no navegador através do WebDriver padrão, semelhante ao Selenium.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também