Appium — WebDriver protokoluna əsaslanan mobil, veb və desktop tətbiqlərinin test avtomatlaşdırılması üçün kross-platforma freymvorkudur. O, istənilən proqramlaşdırma dilində testlər yazmağa və onları Android, iOS və Windows-da kod dəyişmədən işə salmağa imkan verir. Appium Foundation, 2025 məlumatlarına görə, WebDriver protokolu müxtəlif platformalarda tətbiqlərlə qarşılıqlı əlaqə üçün vahid interfeys təmin edir.
Əsas məqamlar
Appium — müştəri-server arxitekturası üzərində qurulmuş mobil tətbiqlərin test avtomatlaşdırılması üçün açıq mənbə freymvorkudur. Appium serveri müştəridən WebDriver protokolu ilə əmrlər qəbul edir və onları yerli drayverlərə ötürür: iOS üçün XCUITest, Android üçün UiAutomator2 və Windows üçün WinAppDriver.
Appium 2013-cü ildə yaradılmışdır və o vaxtdan kross-platforma testində sənaye standartına çevrilmişdir. Layihə Appium Foundation tərəfindən idarə olunur və böyük şirkətlər tərəfindən dəstəklənir: Sauce Labs, HeadSpin, Microsoft. Hər ay dünyada 500 mindən çox tester Appium-dan istifadə edir.
Appium üç növ tətbiqi dəstəkləyir: yerli (iOS, Android, Windows), mobil veb brauzerlər (Safari, Chrome) və hibrid tətbiqlər (yerli qabıq daxilində WebView). Hər növ öz kontekstindən istifadə edir: NATIVE_APP, WEBVIEW və ya CHROMIUM.
Appium arxitekturası dörd səviyyədən ibarətdir: müştəri kodu → Appium Client Library → Appium Server → yerli drayver. Müştəri kitabxanası WebDriver protokolunu tətbiq edir və serverə HTTP sorğuları göndərir. Server onları platformanın yerli drayverinin əmrlərinə çevirir.
WebDriver — Appium tərəfindən mobil cihazlar üçün uyğunlaşdırılmış W3C brauzer avtomatlaşdırma standartıdır. Hər bir hərəkət — elementin axtarışı, klik, mətn daxil etmə — serverə HTTP sorğusu kimi göndərilir. Məsələn, POST /session/{id}/element yeni test seansı yaradır.
Hər test Desired Capabilities obyekti vasitəsilə seans yaratmaqla başlayır. Orada göstərilir: platformName, deviceName, appPath, automationName və əlavə parametrlər. Appium bu məlumatları uyğun yerli drayveri seçmək və cihazı konfiqurasiya etmək üçün istifadə edir.
# Android üçün Desired Capabilities nümunəsi
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 npm vasitəsilə quraşdırılır: npm install -g appium. Quraşdırmadan sonra hər platforma üçün yerli drayverləri konfiqurasiya etmək lazımdır: appium driver install xcuitest və appium driver install uiautomator2. iOS ilə iş üçün Xcode, Android üçün isə Android SDK tələb olunur.
Appium Inspector — interfeys elementlərinin inspeksiyası üçün qrafik vasitədir. O, işləyən Appium serverinə qoşulur və UI komponentlərinin iyerarxiyasını, onların atributlarını və lokatorlarını göstərir. Inspector test yazmazdan əvvəl selektoru yoxlamağa imkan verir.
Appium serveri appium əmri ilə işə salınır, port, ünvan, loglama kimi parametrlər əlavə edilə bilər. Defolt olaraq server 4723 portunu dinləyir. Çoxlu cihazların paralel işə salınması üçün müxtəlif portlar və ya Appium klasterlərindən istifadə olunur.
# Appium serverinin loglama ilə işə salınması
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Appium testləri kodun təşkili üçün Page Object nümunəsindən istifadə edir. Tətbiqin hər ekranı element lokatorları və qarşılıqlı əlaqə metodları ilə ayrıca sinif kimi təsvir olunur. Page Object Model interfeys dəyişikliklərində testlərin saxlanmasını asanlaşdırır və selektorları test ssenariləri arasında təkrar istifadə edir.
Appium elementlərin axtarışı üçün çoxlu strategiyaları dəstəkləyir: id, xpath, accessibilityId, className, androidUIAutomator və iOSClassChain. Ən çox accessibilityId və id tövsiyə olunur — onlar düzəliş dəyişikliklərində sabitdir. XPath yalnız digər lokatorlar olmadıqda istifadə edilməlidir.
// Giriş ekranı üçün Page Object
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 TouchAction sinfi və ya W3C Actions API vasitəsilə mürəkkəb işarələri dəstəkləyir: sürüşdürmələr, multitouch, uzun basmalar, elementə sürüşdürmə. Yeni W3C Actions API yeni layihələr üçün tövsiyə olunur, çünki standartlaşdırılmışdır və müxtəlif platforma versiyalarında daha sabit işləyir.
Appium tez-tez Detox, XCUITest və Espresso ilə müqayisə edilir. Appium-un əsas üstünlüyü kross-platformalıqdır: bir test iOS və Android-də dəyişiklik olmadan işə salına bilər. Lakin Detox React Native üçün daha yaxşı sinxronizasiya təmin edir, XCUITest/Espresso isə yerli testlər üçün daha sürətli icra verir.
Appium iOS, Android və veb üçün vahid freymvork tələb olunan layihələr üçün uyğundur. Java və ya Python-da yazan testerləri olan komandalar üçün əvəzolunmazdır. Çox sayda E2E testi olan React Native layihələri üçün avtomatik sinxronizasiyaya görə Detox-u nəzərdən keçirmək daha yaxşıdır.
| Freymvork | Yanaşma | Sürət | Kross-platformalıq |
|---|---|---|---|
| Appium | Black-box | Orta | iOS, Android, Windows |
| Detox | Gray-box | Yüksək | iOS + Android (React Native) |
| XCUITest | White-box | Yüksək | Yalnız iOS |
Appium Grid — testlərin çoxlu cihazlarda eyni vaxtda paralel işə salınması üçün genişlənmədir. Appium Grid Selenium Grid əsasında qurulmuşdur və testləri bir neçə Appium serveri arasında bölüşdürməyə imkan verir, hər biri öz cihaz və ya emulyator dəsti ilə idarə olunur. Bu, bir cihazda reqressiya testi saatlarla çəkən böyük layihələr üçün kritik əhəmiyyət daşıyır — Grid vaxtı düyünlərin sayına mütənasib olaraq dəqiqələrə endirir.
Grid-in qurulması üçün cihazları olan düyünləri (nodes) təsvir edən JSON formatında konfiqurasiya faylı istifadə olunur. Hər düyün göstərir: server portu, platformalı cihazların siyahısı, OS versiyası və maksimum seans sayı. Hub testləri boş düyünlərə paylayaraq infrastrukturun maksimum yüklənməsini təmin edir.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Öz cihaz infrastrukturunuz yoxdursa, bulud xidmətləri mövcuddur: Sauce Labs, BrowserStack, LambdaTest. Onlar buludda yüzlərlə real cihaz və emulyator təqdim edir. Appium ilə inteqrasiya minimaldır: localhost əvəzinə Desired Capabilities-də bulud hubının URL-ni və etimadnaməni göstərmək kifayətdir.
Appium TestNG (Java) və ya pytest-xdist (Python) ilə testlərin paralel işə salınmasını dəstəkləyir. Paralellik hər seans üçün unikal portlar və izolyasiya olunmuş test məlumatları tələb edir. Hər bir axın ayrıca cihaz və ya emulyatorda öz Appium seansını işə salır. Bulud xidmətlərindən istifadə edərkən paralellik avtomatikdir — platforma testləri mövcud cihazlara özü paylayır və bitdikdən sonra onları boşaldır.
Appium ilə problemlər olduqda ilk addım server jurnalını yoxlamaqdır (appium --log-level debug). Tipik səhvlər: port məşğuldur (başqa --port göstərin), uyğun olmayan drayver versiyası, Android SDK və ya Xcode-un olmaması. iOS üçün WebKitAgent-in işlədiyinə və simulyatora girişi olduğuna əmin olun.
Appium elementi tapmırsa, yoxlayın: kontekst düzgündürmü (NATIVE_APP vs WEBVIEW), element ekranda görünürmü, sürüşdürmə tələb edirmi və lokator düzgündürmü. Testə daxil etməzdən əvvəl interaktiv axtarış və XPath ifadələrinin yoxlanılması üçün Appium Inspector istifadə edin. WebDriverWait vasitəsilə elementin görünməsini gözləməyi aktiv etmək də faydalıdır — bu, UI-nin yavaş yüklənməsi zamanı sinxronizasiya problemini həll edir.
Seansların səhv başa çatdırılması Appium testlərinin qeyri-sabitliyinin ümumi səbəbidir. Həmişə drayveri finally blokunda və ya AutoCloseable vasitəsilə bağlayın. Xətalar zamanı məcburi driver.quit() istifadə edin. iOS üçün WebKitAgent (WDA) seanslar arasında yenidən başladıldığına əmin olun, əks halda session not created xətası yarana bilər. CI-də seansların vəziyyətini izləmək üçün Appium Dashboard plaginini qoşmaq faydalıdır, o, bütün işləyən testlərin statusunu real vaxtda vizuallaşdırır.
Testlərin sabitliyini artırmaq üçün istifadə edin: shouldTerminateApp (tətbiqin testlər arasında bağlanması), noReset (məlumatların seanslar arasında saxlanması), autoGrantPermissions (sistem dialoqlarının avtomatik icazəsi). Həmçinin cihazda Developer Options vasitəsilə animasiyaları söndürmək tövsiyə olunur.
Tez-tez verilən suallar
Appium bütün populyar dilləri müştəri kitabxanaları vasitəsilə dəstəkləyir: Java, Python, JavaScript, Ruby, C#, PHP və Kotlin. Hər kitabxana eyni WebDriver protokolunu tətbiq edir, bu da istənilən dildə kross-platforma testləri yazmağa imkan verir.
Xeyr, Appium həm real cihazlarla, həm də emulyatorlar və simulyatorlarla işləyir. Android üçün Android Studio emulyatorları, iOS üçün Xcode simulyatorları istifadə olunur. Real cihazlar yalnız aparat funksiyalarını test etmək üçün lazımdır: sensorlar, NFC, kamera.
Appium 2 tamamilə modul arxitekturası ilə plaginlər və ayrıca drayverlərlə yenidən yazılmışdır. Appium 1-də bütün drayverlər serverə daxil idi. Appium 2 drayverləri quraşdırmaq üçün appium driver install və plaginlər üçün appium plugin install əmrlərindən istifadə edir.
Appium axtarış strategiyalarından istifadə edir: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator və By.iOSClassChain. Sürətləndirmək üçün accessibilityId istifadə etmək tövsiyə olunur — o, sabitdir və düzəliş dəyişikliklərindən asılı deyil.
Bəli, Appium mobil brauzerlərin testini dəstəkləyir — iOS-da Safari və Android-də Chrome. Bunun üçün WEBVIEW və ya CHROMIUM konteksti istifadə olunur. Testlər Selenium kimi standart WebDriver vasitəsilə brauzerdə işə salınır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun