Appium — o que é, princípios de funcionamento e testes multiplataforma

Autor: IT Sectr Publicado: 2026-04-09 Tempo de leitura: 8 min

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 multiplataforma de automação de testes baseado em WebDriver
  • API unificada permite escrever testes em Java, Python, JavaScript, Ruby, C# e outras linguagens
  • Suporte a plataformas inclui iOS, Android, Windows e aplicações web
  • Abordagem black-box não requer acesso ao código-fonte da aplicação
  • Appium Server atua como proxy entre o teste e o driver nativo da plataforma

O que é Appium

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.

História e comunidade

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.

Tipos de aplicações suportados

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.

Arquitetura do Appium e WebDriver

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.

Protocolo WebDriver

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.

Sessões e Desired Capabilities

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.

python
# 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)

Instalação e configuração do Appium

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

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.

Iniciando o servidor

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.

bash
# Iniciando o servidor Appium com registro
appium \
  --port 4723 \
  --log-level debug \
  --use-plugins images \
  --base-path /wd/hub

Escrevendo testes no Appium

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.

Localizadores de elementos

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.

java
// 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();
    }
}

Trabalhando com gestos e ações

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 vs alternativas

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.

Quando escolher Appium

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.

FrameworkAbordagemVelocidadeMultiplataforma
AppiumBlack-boxMédiaiOS, Android, Windows
DetoxGray-boxAltaiOS + Android (React Native)
XCUITestWhite-boxAltaApenas iOS

Appium Grid e teste em nuvem

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.

Configuração do Grid

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.

json
{
  "capabilities": [
    {
      "browserName": "android",
      "platformName": "Android",
      "deviceName": "Pixel_4",
      "platformVersion": "14.0",
      "maxInstances": 2
    }
  ],
  "configuration": {
    "port": 4724,
    "registerCycle": 5000
  }
}

Serviços em nuvem

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.

Execução paralela

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.

Diagnóstico e depuração do Appium

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.

Problemas de busca de elementos

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.

Gestão de sessões

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.

Flags de estabilidade

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

Quais linguagens de programação o Appium suporta?

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.

Preciso de um telefone real para o Appium?

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.

Qual é a diferença entre Appium 1 e Appium 2?

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.

Como o Appium encontra elementos no ecrã?

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.

É possível testar aplicações web no Appium?

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

  • Appium — um framework E2E multiplataforma baseado em WebDriver com suporte para iOS, Android e Windows
  • Arquitetura cliente-servidor permite escrever testes em Java, Python, JavaScript, Ruby e C#
  • Desired Capabilities configuram a sessão de teste para uma plataforma e dispositivo específicos
  • Page Object Model é recomendado para organizar o código de teste e reutilizar seletores
  • Appium Inspector ajuda a inspecionar elementos da interface e selecionar localizadores
  • Abordagem black-box não requer acesso ao código-fonte da aplicação
  • Appium 2 usa uma arquitetura modular com drivers e plugins conectáveis

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.

Discutir o projeto

Leia também