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 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.
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.
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.
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.
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.
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.
# 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)
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 è 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.
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.
# Avvio del server Appium con registrazione
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
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.
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.
// 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();
}
}
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 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.
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.
| Framework | Approccio | Velocità | Multipiattaforma |
|---|---|---|---|
| Appium | Black-box | Media | iOS, Android, Windows |
| Detox | Gray-box | Alta | iOS + Android (React Native) |
| XCUITest | White-box | Alta | Solo iOS |
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.
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.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
Leggi anche