Appium — WebDriver protokoliga asoslangan mobil, veb va desktop ilovalarini testlashni avtomatlashtirish uchun kross-platforma freymvorkidir. U istalgan dasturlash tilida testlar yozish va ularni Android, iOS va Windows da kodni o'zgartirmasdan ishga tushirish imkonini beradi. Appium Foundation, 2025 ma'lumotlariga ko'ra, WebDriver protokoli turli platformalarda ilovalar bilan o'zaro aloqa qilish uchun yagona interfeysni ta'minlaydi.
Asosiy ma'lumotlar
Appium — mijoz-server arxitekturasida qurilgan mobil ilovalarni testlashni avtomatlashtirish uchun ochiq manbali freymvorkdir. Appium serveri mijozdan WebDriver protokoli orqali buyruqlarni qabul qiladi va ularni mahalliy drayverlarga topshiradi: iOS uchun XCUITest, Android uchun UiAutomator2 va Windows uchun WinAppDriver.
Appium 2013 yilda yaratilgan va shundan beri kross-platforma testlashda sanoat standartiga aylandi. Loyiha Appium Foundation tomonidan boshqariladi va yirik kompaniyalar tomonidan qo'llab-quvvatlanadi: Sauce Labs, HeadSpin, Microsoft. Har oy dunyo bo'ylab 500 mingdan ortiq tester Appium dan foydalanadi.
Appium uch turdagi ilovalarni qo'llab-quvvatlaydi: mahalliy (iOS, Android, Windows), mobil veb brauzerlar (Safari, Chrome) va gibrid ilovalar (mahalliy qobiq ichidagi WebView). Har bir tur o'z kontekstidan foydalanadi: NATIVE_APP, WEBVIEW yoki CHROMIUM.
Appium arxitekturasi to'rt darajadan iborat: mijoz kodi → Appium Client Library → Appium Server → mahalliy drayver. Mijoz kutubxonasi WebDriver protokolini amalga oshiradi va serverga HTTP so'rovlarini yuboradi. Server ularni platformaning mahalliy drayveri buyruqlariga aylantiradi.
WebDriver — Appium tomonidan mobil qurilmalar uchun moslashtirilgan W3C brauzer avtomatlashtirish standartidir. Har bir harakat — elementni qidirish, bosish, matn kiritish — serverga HTTP so'rovi sifatida yuboriladi. Masalan, POST /session/{id}/element yangi test seansini yaratadi.
Har bir test Desired Capabilities obyekti orqali seans yaratish bilan boshlanadi. Unda ko'rsatiladi: platformName, deviceName, appPath, automationName va qo'shimcha parametrlar. Appium bu ma'lumotlardan mos mahalliy drayverni tanlash va qurilmani sozlash uchun foydalanadi.
# Android uchun Desired Capabilities namunasi
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 orqali o'rnatiladi: npm install -g appium. O'rnatishdan so'ng har bir platforma uchun mahalliy drayverlarni sozlash kerak: appium driver install xcuitest va appium driver install uiautomator2. iOS bilan ishlash uchun Xcode, Android uchun esa Android SDK talab qilinadi.
Appium Inspector — interfeys elementlarini tekshirish uchun grafik vositadir. U ishlayotgan Appium serveriga ulanadi va UI komponentlarining iyerarxiyasini, ularning atributlari va lokatorlarini ko'rsatadi. Inspector test yozishdan oldin selektorni tekshirish imkonini beradi.
Appium serveri appium buyrug'i bilan ixtiyoriy parametrlar bilan ishga tushiriladi: port, manzil, loglash. Odatiy bo'lib server 4723 portini tinglaydi. Bir nechta qurilmalarni parallel ishga tushirish uchun turli portlar yoki Appium klasterlari ishlatiladi.
# Appium serverini loglash bilan ishga tushirish
appium \
--port 4723 \
--log-level debug \
--use-plugins images \
--base-path /wd/hub
Appium testlari kodni tashkil qilish uchun Page Object namunasidan foydalanadi. Ilovaning har bir ekrani element lokatorlari va o'zaro ta'sir usullari bilan alohida sinf sifatida tavsiflanadi. Page Object Model interfeys o'zgarishlarida testlarni saqlashni osonlashtiradi va selektorlarni test stsenariylari o'rtasida qayta ishlatadi.
Appium elementlarni qidirishning ko'plab strategiyalarini qo'llab-quvvatlaydi: id, xpath, accessibilityId, className, androidUIAutomator va iOSClassChain. Eng ko'p accessibilityId va id tavsiya etiladi — ular tartib o'zgarishlarida barqaror. XPath faqat boshqa lokatorlar bo'lmaganda ishlatilishi kerak.
// Kirish ekrani uchun 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 yoki W3C Actions API orqali murakkab imo-ishoralarni qo'llab-quvvatlaydi: surish, multitouch, uzoq bosish, elementga aylantirish. Yangi W3C Actions API yangi loyihalar uchun tavsiya etiladi, chunki u standartlashtirilgan va turli platforma versiyalarida barqaror ishlaydi.
Appium ko'pincha Detox, XCUITest va Espresso bilan solishtiriladi. Appium ning asosiy ustunligi kross-platformalilikdir: bitta testni iOS va Android da o'zgartirishsiz ishga tushirish mumkin. Biroq Detox React Native uchun yaxshiroq sinxronizatsiyani ta'minlaydi, XCUITest/Espresso esa mahalliy testlar uchun tezroq bajarishni beradi.
Appium iOS, Android va veb uchun yagona freymvork talab qilinadigan loyihalar uchun mos keladi. Java yoki Python da yozadigan testerlari bo'lgan jamoalar uchun ajralmasdir. Ko'p sonli E2E testlari bo'lgan React Native loyihalari uchun avtomatik sinxronizatsiya tufayli Detox ni ko'rib chiqish yaxshiroqdir.
| Freymvork | Yondashuv | Tezlik | Kross-platformalilik |
|---|---|---|---|
| Appium | Black-box | O'rta | iOS, Android, Windows |
| Detox | Gray-box | Yuqori | iOS + Android (React Native) |
| XCUITest | White-box | Yuqori | Faqat iOS |
Appium Grid — testlarni bir vaqtning o'zida bir nechta qurilmalarda parallel ishga tushirish uchun kengaytmadir. Appium Grid Selenium Grid asosida qurilgan va testlarni bir nechta Appium serverlari o'rtasida taqsimlash imkonini beradi, ularning har biri o'z qurilmalar yoki emulyatorlar to'plamini boshqaradi. Bu bitta qurilmada regressiya testi soatlab davom etadigan yirik loyihalar uchun juda muhimdir — Grid vaqtni tugunlar soniga mutanosib ravishda daqiqalarga qisqartiradi.
Grid ni sozlash uchun qurilmalari bo'lgan tugunlarni (nodes) tavsiflovchi JSON formatidagi konfiguratsiya fayli ishlatiladi. Har bir tugun ko'rsatadi: server porti, platformali qurilmalar ro'yxati, OT versiyasi va maksimal seanslar soni. Hub testlarni bo'sh tugunlarga taqsimlab, infratuzilmaning maksimal yuklanishini ta'minlaydi.
{
"capabilities": [
{
"browserName": "android",
"platformName": "Android",
"deviceName": "Pixel_4",
"platformVersion": "14.0",
"maxInstances": 2
}
],
"configuration": {
"port": 4724,
"registerCycle": 5000
}
}
Agar o'z qurilma infratuzilmangiz mavjud bo'lmasa, bulutli xizmatlar mavjud: Sauce Labs, BrowserStack, LambdaTest. Ular bulutda yuzlab real qurilmalar va emulyatorlarni taqdim etadi. Appium bilan integratsiya minimal: localhost o'rniga Desired Capabilities da bulut hub URL va hisob ma'lumotlarini ko'rsatish kifoya.
Appium TestNG (Java) yoki pytest-xdist (Python) yordamida testlarni parallel ishga tushirishni qo'llab-quvvatlaydi. Parallellik har bir seans uchun noyob portlar va izolyatsiya qilingan test ma'lumotlarini talab qiladi. Har bir oqim alohida qurilma yoki emulyatorda o'z Appium seansini ishga tushiradi. Bulutli xizmatlardan foydalanganda parallellik avtomatik — platforma testlarni mavjud qurilmalarga o'zi taqsimlaydi va tugagandan so'ng bo'shatadi.
Appium bilan muammolar bo'lganda, birinchi qadam server jurnalini tekshirishdir (appium --log-level debug). Oddiy xatolar: port band (boshqa --port ko'rsating), mos kelmaydigan drayver versiyasi, Android SDK yoki Xcode yo'qligi. iOS uchun WebKitAgent ishlayotganiga va simulyatorga kirishi borligiga ishonch hosil qiling.
Agar Appium elementni topmasa, tekshiring: kontekst to'g'rimi (NATIVE_APP vs WEBVIEW), element ekranda ko'rinadimi, aylantirish kerakmi va lokator to'g'rimi. Testga kiritishdan oldin interaktiv qidirish va XPath ifodalarini tekshirish uchun Appium Inspector dan foydalaning. Shuningdek, WebDriverWait orqali element paydo bo'lishini kutishni yoqish foydali — bu UI sekin yuklanganda sinxronizatsiya muammosini hal qiladi.
Seanslarning noto'g'ri tugatilishi Appium testlarining beqarorligining keng tarqalgan sababidir. Har doim drayverni finally blokida yoki AutoCloseable orqali yoping. Xatolarda majburiy driver.quit() dan foydalaning. iOS uchun WebKitAgent (WDA) seanslar o'rtasida qayta ishga tushirilganligiga ishonch hosil qiling, aks holda session not created xatosi yuz berishi mumkin. CI da seanslar holatini kuzatish uchun Appium Dashboard plaginini ulash foydali, u barcha ishlayotgan testlarning holatini real vaqtda vizuallashtiradi.
Testlarning barqarorligini oshirish uchun foydalaning: shouldTerminateApp (ilovani testlar o'rtasida yopish), noReset (ma'lumotlarni seanslar o'rtasida saqlash), autoGrantPermissions (tizim muloqot oynalarini avtomatik ruxsatlash). Shuningdek, qurilmada Developer Options orqali animatsiyalarni o'chirish tavsiya etiladi.
Tez-tez so'raladigan savollar
Appium barcha mashhur tillarni mijoz kutubxonalari orqali qo'llab-quvvatlaydi: Java, Python, JavaScript, Ruby, C#, PHP va Kotlin. Har bir kutubxona bir xil WebDriver protokolini amalga oshiradi, bu istalgan tilda kross-platforma testlari yozish imkonini beradi.
Yo'q, Appium ham real qurilmalar, ham emulyatorlar va simulyatorlar bilan ishlaydi. Android uchun Android Studio emulyatorlari, iOS uchun Xcode simulyatorlari ishlatiladi. Haqiqiy qurilmalar faqat apparat funksiyalarini test qilish uchun kerak: sensorlar, NFC, kamera.
Appium 2 butunlay modul arxitekturasi bilan plaginlar va alohida drayverlar bilan qayta yozilgan. Appium 1 da barcha drayverlar serverga o'rnatilgan edi. Appium 2 drayverlarni o'rnatish uchun appium driver install va plaginlar uchun appium plugin install buyruqlaridan foydalanadi.
Appium qidiruv strategiyalaridan foydalanadi: By.id, By.xpath, By.accessibilityId, By.className, By.androidUIAutomator va By.iOSClassChain. Tezlashtirish uchun accessibilityId dan foydalanish tavsiya etiladi — u barqaror va tartib o'zgarishlariga bog'liq emas.
Ha, Appium mobil brauzerlarni test qilishni qo'llab-quvvatlaydi — iOS da Safari va Android da Chrome. Buning uchun WEBVIEW yoki CHROMIUM konteksti ishlatiladi. Testlar Seleniumga o'xshab standart WebDriver orqali brauzerda ishga tushiriladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.