Appium este un framework cross-platform pentru automatizarea testării aplicațiilor mobile, web și desktop, bazat pe protocolul WebDriver. Permite scrierea testelor în orice limbaj de programare și rularea lor pe Android, iOS și Windows fără modificarea codului. Conform datelor Appium Foundation, 2025, protocolul WebDriver asigură o interfață unică de interacțiune cu aplicațiile pe diferite platforme.
Principalele puncte
Appium este un framework open-source pentru automatizarea testării aplicațiilor mobile, construit pe arhitectura client-server. Serverul Appium primește comenzi de la client prin protocolul WebDriver și le deleagă driverelor native: XCUITest pentru iOS, UiAutomator2 pentru Android și WinAppDriver pentru Windows.
Appium a fost creat în 2013 și de atunci a devenit standardul industriei pentru testarea cross-platform. Proiectul este gestionat de Appium Foundation și susținut de companii mari: Sauce Labs, HeadSpin, Microsoft. Lunar, peste 500 de mii de testeri din întreaga lume folosesc Appium.
Appium suportă trei tipuri de aplicații: native (iOS, Android, Windows), browsere web mobile (Safari, Chrome) și aplicații hibride (WebView în interiorul unui shell nativ). Fiecare tip folosește propriul context: NATIVE_APP, WEBVIEW sau CHROMIUM.
Arhitectura Appium constă din patru niveluri: codul client → Appium Client Library → Appium Server → driver nativ. Biblioteca client implementează protocolul WebDriver și trimite cereri HTTP către server. Serverul le transformă în comenzi ale driverului nativ al platformei.
WebDriver este standardul W3C pentru automatizarea browserelor, adaptat de Appium pentru dispozitive mobile. Fiecare acțiune — căutarea unui element, clic, introducerea textului — este trimisă ca cerere HTTP către server. De exemplu, POST /session/{id}/element creează o nouă sesiune de testare.
Fiecare test începe prin crearea unei sesiuni prin obiectul Desired Capabilities. În acesta se specifică: platformName, deviceName, appPath, automationName și parametri suplimentari. Appium folosește aceste date pentru a selecta driverul nativ potrivit și configurarea dispozitivului.
# Exemplu Desired Capabilities pentru 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)
Instalarea Appium se face prin npm: npm install -g appium. După instalare, trebuie configurate driverele native pentru fiecare platformă: appium driver install xcuitest și appium driver install uiautomator2. Pentru lucrul cu iOS este necesar Xcode, iar pentru Android — Android SDK.
Appium Inspector este un instrument grafic pentru inspecția elementelor interfeței. Se conectează la serverul Appium pornit și arată ierarhia componentelor UI, atributele și localizatorii acestora. Inspector permite verificarea selectorului înainte de scrierea testului.
Serverul Appium se pornește cu comanda appium cu parametri opționali: port, adresă, logare. Implicit, serverul ascultă pe portul 4723. Pentru rularea paralelă a mai multor dispozitive se folosesc porturi diferite sau clustere Appium.
# Pornirea serverului Appium cu logare
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Testele Appium folosesc modelul Page Object pentru organizarea codului. Fiecare ecran al aplicației este descris de o clasă separată cu localizatori de elemente și metode de interacțiune. Modelul Page Object simplifică întreținerea testelor la modificări ale interfeței și reutilizează selectorii între scenariile de test.
Appium suportă multiple strategii de căutare a elementelor: id, xpath, accessibilityId, className, androidUIAutomator și iOSClassChain. Cele mai preferate sunt accessibilityId și id — sunt stabile la modificări ale layout-ului. XPath trebuie folosit doar în absența altor localizatori.
// Page Object pentru ecranul de autentificare
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 suportă gesturi complexe prin clasa TouchAction sau W3C Actions API: swipe-uri, multitouch, apăsări lungi, derulare la element. Noul W3C Actions API este recomandat pentru proiecte noi, deoarece este standardizat și funcționează mai stabil pe diferite versiuni de platforme.
Appium este adesea comparat cu Detox, XCUITest și Espresso. Principalul avantaj al Appium este cross-platformitatea: un singur test poate fi rulat pe iOS și Android fără modificări. Totuși, Detox oferă o sincronizare mai bună pentru React Native, iar XCUITest/Espresso oferă o execuție mai rapidă pentru testele native.
Appium este potrivit pentru proiecte care necesită un framework unic pentru iOS, Android și web. Este indispensabil în echipele cu testeri care scriu în Java sau Python. Pentru proiecte React Native cu multe teste E2E, este mai bine să luați în considerare Detox datorită sincronizării automate.
| Framework | Abordare | Viteză | Cross-platform |
|---|---|---|---|
| Appium | Black-box | Medie | iOS, Android, Windows |
| Detox | Gray-box | Ridicată | iOS + Android (React Native) |
| XCUITest | White-box | Ridicată | Doar iOS |
Appium Grid este o extensie pentru rularea paralelă a testelor pe mai multe dispozitive simultan. Appium Grid este construit pe baza Selenium Grid și permite distribuirea testelor între mai multe servere Appium, fiecare gestionând propriul set de dispozitive sau emulatoare. Acest lucru este critic pentru proiecte mari, unde o rulare de regresie pe un singur dispozitiv durează ore — Grid reduce timpul la minute proporțional cu numărul de noduri.
Pentru configurarea Grid se folosește un fișier de configurare în format JSON, în care sunt descrise nodurile (nodes) cu dispozitive. Fiecare nod specifică: portul serverului, lista de dispozitive cu platforma, versiunea sistemului de operare și numărul maxim de sesiuni. Hub distribuie testele către nodurile libere, asigurând încărcarea maximă a infrastructurii.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Dacă infrastructura proprie de dispozitive nu este disponibilă, există servicii cloud: Sauce Labs, BrowserStack, LambdaTest. Acestea oferă sute de dispozitive reale și emulatoare în cloud. Integrarea cu Appium este minimă: este suficient să specificați URL-ul hub-ului cloud și credențialele în Desired Capabilities în loc de localhost.
Appium suportă rularea paralelă a testelor cu TestNG (Java) sau pytest-xdist (Python). Paralelizarea necesită porturi unice pentru fiecare sesiune și date de test izolate. Fiecare fir de execuție pornește propria sesiune Appium pe un dispozitiv sau emulator separat. La utilizarea serviciilor cloud, paralelizarea este automată — platforma distribuie singură testele către dispozitivele disponibile și le eliberează după finalizare.
La probleme cu Appium, primul pas este verificarea log-ului serverului (appium --log-level debug). Erori tipice: port ocupat (specificați alt --port), versiune incompatibilă de driver, lipsa Android SDK sau Xcode. Pentru iOS, asigurați-vă că WebKitAgent rulează și are acces la simulator.
Dacă Appium nu găsește un element, verificați: contextul corect (NATIVE_APP vs WEBVIEW), dacă elementul este vizibil pe ecran, dacă necesită derulare și dacă localizatorul este corect. Folosiți Appium Inspector pentru căutare interactivă și verificarea expresiilor XPath înainte de inserarea în test. De asemenea, este utilă activarea așteptării apariției elementului prin WebDriverWait — aceasta rezolvă problema de sincronizare la încărcarea lentă a UI.
Finalizarea incorectă a sesiunilor este o cauză frecventă a instabilității testelor Appium. Închideți întotdeauna driverul în blocul finally sau prin AutoCloseable. La erori, folosiți forțat driver.quit(). Pentru iOS, asigurați-vă că WebKitAgent (WDA) este repornit între sesiuni, altfel poate apărea eroarea session not created. Pentru monitorizarea stării sesiunilor în CI, este util să conectați pluginul Appium Dashboard care vizualizează statusul tuturor testelor în timp real.
Pentru a crește stabilitatea testelor, utilizați: shouldTerminateApp (închiderea aplicației între teste), noReset (păstrarea datelor între sesiuni), autoGrantPermissions (acordarea automată a permisiunilor de sistem). De asemenea, se recomandă dezactivarea animațiilor pe dispozitiv prin Developer Options.
Întrebări frecvente
Appium suportă toate limbajele populare prin biblioteci client: Java, Python, JavaScript, Ruby, C#, PHP și Kotlin. Fiecare bibliotecă implementează același protocol WebDriver, permițând scrierea de teste cross-platform în orice limbaj.
Nu, Appium funcționează atât cu dispozitive reale, cât și cu emulatoare și simulatoare. Pentru Android se folosesc emulatoarele Android Studio, pentru iOS — simulatoarele Xcode. Dispozitivele reale sunt necesare doar pentru testarea funcțiilor hardware: senzori, NFC, cameră.
Appium 2 a fost complet rescris cu arhitectură modulară cu pluginuri și drivere separate. În Appium 1, toate driverele erau încorporate în server. Appium 2 folosește comenzile appium driver install pentru instalarea driverelor și appium plugin install pentru pluginuri.
Appium folosește strategii de căutare: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator și By.iOSClassChain. Pentru viteză, se recomandă utilizarea accessibilityId — este stabil și nu depinde de modificările layout-ului.
Da, Appium suportă testarea browserelor mobile — Safari pe iOS și Chrome pe Android. Pentru aceasta se folosește contextul WEBVIEW sau CHROMIUM. Testele se rulează în browser prin WebDriver standard, similar cu Selenium.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și