Appium — cos'è, principi di funzionamento e test multipiattaforma

Autore: IT Sectr Pubblicato: 2026-04-09 Tempo di lettura: 8 min

Appium è un framework multipiattaforma per automatizzare i test di applicazioni mobili, web e desktop, basato sul protocollo WebDriver. Permette di scrivere test in qualsiasi linguaggio di programmazione ed eseguirli su Android, iOS e Windows senza modificare il codice. Secondo la Appium Foundation, 2025, il protocollo WebDriver fornisce un'interfaccia unificata per interagire con le applicazioni su diverse piattaforme.

Punti chiave

  • Appium — un framework multipiattaforma per l'automazione dei test basato su WebDriver
  • API unificata permette di scrivere test in Java, Python, JavaScript, Ruby, C# e altri linguaggi
  • Supporto piattaforme include iOS, Android, Windows e applicazioni web
  • Approccio black-box non richiede accesso al codice sorgente dell'applicazione
  • Appium Server funge da proxy tra il test e il driver nativo della piattaforma

Cos'è Appium

Appium è un framework open source per l'automazione dei test di applicazioni mobili, costruito su un'architettura client-server. Il server Appium riceve i comandi dal client tramite il protocollo WebDriver e li delega ai driver nativi: XCUITest per iOS, UiAutomator2 per Android e WinAppDriver per Windows.

Storia e comunità

Appium è stato creato nel 2013 e da allora è diventato lo standard del settore per i test multipiattaforma. Il progetto è gestito da Appium Foundation e supportato da grandi aziende: Sauce Labs, HeadSpin, Microsoft. Appium è utilizzato da oltre 500 mila tester in tutto il mondo ogni mese.

Tipi di applicazioni supportati

Appium supporta tre tipi di applicazioni: native (iOS, Android, Windows), browser web mobili (Safari, Chrome) e applicazioni ibride (WebView all'interno di un guscio nativo). Ogni tipo utilizza il proprio contesto: NATIVE_APP, WEBVIEW o CHROMIUM.

Architettura di Appium e WebDriver

L'architettura di Appium è composta da quattro livelli: codice client → Appium Client Library → Appium Server → driver nativo. La libreria client implementa il protocollo WebDriver e invia richieste HTTP al server. Il server le converte in comandi del driver nativo della piattaforma.

Protocollo WebDriver

WebDriver è uno standard W3C per l'automazione dei browser, adattato da Appium per i dispositivi mobili. Ogni azione — ricerca elemento, tocco, inserimento testo — viene inviata come richiesta HTTP al server. Ad esempio, POST /session/{id}/element crea una nuova sessione di test.

Sessioni e Desired Capabilities

Ogni test inizia creando una sessione tramite l'oggetto Desired Capabilities. Specifica: platformName, deviceName, appPath, automationName e parametri aggiuntivi. Appium utilizza questi dati per selezionare il driver nativo appropriato e la configurazione del dispositivo.

python
# Esempio di Desired Capabilities per 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)

Installazione e configurazione di Appium

Appium viene installato tramite npm: npm install -g appium. Dopo l'installazione, è necessario configurare i driver nativi per ogni piattaforma: appium driver install xcuitest e appium driver install uiautomator2. Xcode è necessario per iOS e Android SDK per Android.

Appium Inspector

Appium Inspector è uno strumento grafico per ispezionare gli elementi dell'interfaccia utente. Si connette a un server Appium in esecuzione e mostra la gerarchia dei componenti dell'interfaccia, i loro attributi e localizzatori. Inspector permette di verificare un selettore prima di scrivere un test.

Avvio del server

Il server Appium viene avviato con il comando appium con parametri opzionali: porta, indirizzo, registrazione. Per impostazione predefinita, il server ascolta sulla porta 4723. Porte diverse o cluster Appium vengono utilizzati per l'esecuzione parallela su più dispositivi.

bash
# Avvio del server Appium con registrazione
appium \
  --port 4723 \
  --log-level debug \
  --use-plugins images \
  --base-path /wd/hub

Scrivere test con Appium

I test Appium utilizzano il pattern Page Object per organizzare il codice. Ogni schermata dell'app è descritta da una classe separata con localizzatori di elementi e metodi di interazione. Il Page Object Model semplifica la manutenzione dei test quando l'interfaccia cambia e riutilizza i selettori tra scenari di test.

Localizzatori di elementi

Appium supporta molte strategie di ricerca degli elementi: id, xpath, accessibilityId, className, androidUIAutomator e iOSClassChain. I più preferiti sono accessibilityId e id — sono stabili nonostante le modifiche al layout. XPath dovrebbe essere usato solo quando altri localizzatori non sono disponibili.

java
// Page Object per la schermata di 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();
    }
}

Lavorare con gesti e azioni

Appium supporta gesti complessi attraverso la classe TouchAction o l'API W3C Actions: scorrimenti, multitocco, pressioni lunghe, scorrimento verso un elemento. La nuova API W3C Actions è consigliata per i nuovi progetti poiché è standardizzata e funziona in modo più stabile su diverse versioni di piattaforma.

Appium vs alternative

Appium viene spesso confrontato con Detox, XCUITest ed Espresso. Il principale vantaggio di Appium è la capacità multipiattaforma: un test può essere eseguito su iOS e Android senza modifiche. Tuttavia, Detox fornisce una migliore sincronizzazione per React Native, e XCUITest/Espresso offrono un'esecuzione più veloce per i test nativi.

Quando scegliere Appium

Appium è adatto per progetti che richiedono un framework unico per iOS, Android e web. È indispensabile in team con tester che scrivono in Java o Python. Per progetti React Native con molti test E2E, considera Detox grazie alla sincronizzazione automatica.

FrameworkApproccioVelocitàMultipiattaforma
AppiumBlack-boxMediaiOS, Android, Windows
DetoxGray-boxAltaiOS + Android (React Native)
XCUITestWhite-boxAltaSolo iOS

Appium Grid e test cloud

Appium Grid è un'estensione per eseguire test in parallelo su più dispositivi contemporaneamente. Appium Grid è costruito su Selenium Grid e permette di distribuire i test tra più server Appium, ciascuno che gestisce il proprio insieme di dispositivi o emulatori. Questo è fondamentale per grandi progetti dove il test di regressione su un singolo dispositivo richiede ore — Grid riduce il tempo a minuti proporzionale al numero di nodi.

Configurazione di Grid

La configurazione di Grid utilizza un file di configurazione JSON che descrive i nodi con dispositivi. Ogni nodo specifica: porta del server, elenco di dispositivi con piattaforma, versione del sistema operativo e numero massimo di sessioni. L'Hub distribuisce i test tra i nodi liberi, garantendo il massimo utilizzo dell'infrastruttura.

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

Servizi cloud

Se la propria infrastruttura di dispositivi non è disponibile, esistono servizi cloud: Sauce Labs, BrowserStack, LambdaTest. Forniscono centinaia di dispositivi reali ed emulatori nel cloud. L'integrazione con Appium è minima: basta specificare l'URL dell'hub cloud e le credenziali in Desired Capabilities invece di localhost.

Esecuzione parallela

Appium supporta l'esecuzione parallela dei test con TestNG (Java) o pytest-xdist (Python). La parallelizzazione richiede porte uniche per ogni sessione e dati di test isolati. Ogni thread avvia la propria sessione Appium su un dispositivo o emulatore separato. Quando si utilizzano servizi cloud, la parallelizzazione è automatica — la piattaforma distribuisce i test tra i dispositivi disponibili e li rilascia dopo il completamento.

Diagnostica e debug di Appium

In caso di problemi con Appium, il primo passo è controllare il log del server (appium --log-level debug). Errori tipici: porta occupata (specificare un'altra --port), versione del driver incompatibile, Android SDK o Xcode mancante. Per iOS, assicurarsi che WebKitAgent sia in esecuzione e abbia accesso al simulatore.

Problemi di ricerca elementi

Se Appium non trova un elemento, verificare: il contesto è corretto (NATIVE_APP vs WEBVIEW), l'elemento è visibile sullo schermo, richiede scrolling e il localizzatore è corretto. Utilizzare Appium Inspector per la ricerca interattiva e la verifica delle espressioni XPath prima di inserirle nel test. È anche utile abilitare l'attesa della visibilità dell'elemento tramite WebDriverWait — questo risolve i problemi di sincronizzazione con il caricamento lento dell'interfaccia.

Gestione delle sessioni

La terminazione impropria delle sessioni è una causa comune di instabilità dei test Appium. Chiudere sempre il driver in un blocco finally o tramite AutoCloseable. In caso di fallimenti, utilizzare driver.quit() forzatamente. Per iOS, assicurarsi che WebKitAgent (WDA) si riavvii tra le sessioni, altrimenti potrebbe verificarsi un errore di sessione non creata. Per monitorare lo stato delle sessioni in CI, è conveniente collegare il plugin Appium Dashboard, che visualizza lo stato di tutti i test in esecuzione in tempo reale.

Flag di stabilità

Per migliorare la stabilità dei test, utilizzare: shouldTerminateApp (terminare l'app tra i test), noReset (mantenere i dati tra le sessioni), autoGrantPermissions (autorizzare automaticamente i dialoghi di sistema). Si consiglia inoltre di disabilitare le animazioni sul dispositivo tramite le Opzioni Sviluppatore.

Domande frequenti

Quali linguaggi di programmazione supporta Appium?

Appium supporta tutti i linguaggi popolari tramite librerie client: Java, Python, JavaScript, Ruby, C#, PHP e Kotlin. Ogni libreria implementa lo stesso protocollo WebDriver, consentendo di scrivere test multipiattaforma in qualsiasi linguaggio.

Ho bisogno di un telefono reale per Appium?

No, Appium funziona sia con dispositivi reali che con emulatori e simulatori. Per Android vengono utilizzati gli emulatori di Android Studio, per iOS i simulatori di Xcode. I dispositivi reali sono necessari solo per testare funzioni hardware: sensori, NFC, fotocamera.

Qual è la differenza tra Appium 1 e Appium 2?

Appium 2 è stato completamente riscritto con un'architettura modulare con plugin e driver separati. In Appium 1, tutti i driver erano integrati nel server. Appium 2 utilizza i comandi appium driver install per installare i driver e appium plugin install per i plugin.

Come fa Appium a trovare elementi sullo schermo?

Appium utilizza strategie di ricerca: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator e By.iOSClassChain. Per velocità, si consiglia di utilizzare accessibilityId — è stabile e non dipende dalle modifiche al layout.

Si possono testare applicazioni web in Appium?

Sì, Appium supporta il test di browser mobili — Safari su iOS e Chrome su Android. Per questo viene utilizzato il contesto WEBVIEW o CHROMIUM. I test vengono eseguiti nel browser tramite WebDriver standard, simile a Selenium.

Riepilogo

  • Appium — un framework E2E multipiattaforma basato su WebDriver con supporto per iOS, Android e Windows
  • Architettura client-server permette di scrivere test in Java, Python, JavaScript, Ruby e C#
  • Desired Capabilities configurano la sessione di test per una piattaforma e dispositivo specifici
  • Page Object Model è consigliato per organizzare il codice di test e riutilizzare i selettori
  • Appium Inspector aiuta a ispezionare gli elementi dell'interfaccia e selezionare i localizzatori
  • Approccio black-box non richiede accesso al codice sorgente dell'applicazione
  • Appium 2 utilizza un'architettura modulare con driver e plugin collegabili

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche