UI Automator: bu nima, asosiy tushunchalar va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-04-08 O'qish vaqti: 8 daq

UI Automator — bu Google tomonidan Android ilovalarining avtomatlashtirilgan UI-testi uchun framework bo'lib, tizim darajasida ishlaydi va bitta ilovadan tashqari interfeys elementlari bilan o'zaro aloqada bo'la oladi. Espresso'dan farqli o'laroq, UI Automator ma'lum bir ilova jarayoniga bog'lanmagan: u tizim dialoglarini, Bildirishnomalar panelini ochishi va ilovalar o'rtasida almashishi mumkin. Google Android Developers ma'lumotlariga ko'ra, UI Automator qurilmaning UI daraxtiga kirish uchun standart Accessibility Service-dan foydalanadi.

Asosiy fikrlar

  • UI Automator — Android-ning ko'p ilovalik UI-testi uchun framework.
  • UiDevice — qurilma ekrani va uning elementlariga kirish uchun kirish nuqtasi.
  • UiSelector — elementlarni matn, sinf, tavsif va iyerarxiya bo'yicha qidirish mexanizmi.
  • Cross-application — testlar Settings, Browser va test qilinayotgan ilova o'rtasida almashishi mumkin.
  • Accessibility Service — UI Automator undan UI daraxtini o'qish va boshqarish uchun foydalanadi.

UI Automator nima?

UI Automator — operatsion tizim darajasida ishlaydigan Android-ning funksional UI-testi uchun framework. U qurilma ekranidagi istalgan elementga, qaysi ilovaga tegishli bo'lishidan qat'i nazar — tizim holat paneli, ruxsat dialoglari, bosh ekran va uchinchi tomon ilovalari bilan — kirish uchun API taqdim etadi. Bu uni bitta ilovadan tashqariga chiqadigan stsenariylarni testlash uchun ajralmas qiladi.

Arxitektura jihatidan UI Automator Accessibility Service-dan foydalanadi — TalkBack, Switch Access va boshqa qulaylik vositalari tomonidan ishlatiladigan xuddi shu xizmat. Ushbu xizmat orqali framework joriy ekranning to'liq UI komponentlar daraxtini oladi va ular ustida harakatlarni bajarishga imkon beradi: bosish, surish, matn kiritish, uzoq bosish.

UI Automator birinchi marta Android 4.3 (API 18) da paydo bo'ldi va shu vaqtdan beri Android Testing Support Library tarkibiga Google-ning ko'p ilovalik testlash uchun rasmiy vositasi sifatida kiradi. AndroidX Test-da u alohida androidx.test.uiautomator:uiautomator 2.3.0 (2024) versiyasi artefakti sifatida mavjud bo'lib, API 18 dan boshlab barcha Android versiyalarini qo'llab-quvvatlaydi.

UI Automator qanday ishlaydi

Ish printsipi UI Automator joriy ekranning Accessibility daraxtini skanerlashga asoslangan. findObject(selector) metodi chaqirilganda, framework View iyerarxiyasini aylanadi, UiSelector shartlariga mos keladigan birinchi elementni topadi va real View bilan o'zaro aloqa uchun UiObject obyektini qaytaradi.

UI Automator testining hayot aylanishi

Oddiy UI Automator testi jismoniy qurilmani ifodalovchi UiDevice nusxasini olish bilan boshlanadi. UiDevice elementlarni qidirish, tugmalarni bosishni (Home, Back, Recent) boshqarish, ekranni aylantirish va skrinshot olish uchun metodlarni taqdim etadi. UiSelector orqali element topilgandan so'ng, UiObject ustida harakatlar bajariladi.

Asosiy misol

Quyidagi misolda test Settings ilovasini ochadi, “Batareya” bandini matn bo'yicha topadi va ustiga bosadi. UI Automator Activity-ni ishga tushirishni talab qilmaydi — u qurilmaning istalgan ekrani, jumladan uchinchi tomon ilovalari bilan ishlaydi.

kotlin
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

// Sozlamalar ekranini och
device.pressHome()
device.wait(Until.hasObject(UiSelector().text("Sozlamalar")), 2000)

// “Batareya” bandini top va bos
val batteryItem = device.findObject(
    UiSelector().text("Batareya")
)
batteryItem.clickAndWait(Until.newWindow(), 3000)

UiDevice va UiSelector: asosiy sinflar

UiDevice — qurilma bilan o'zaro aloqa uchun asosiy sinf. U elementlarni qidirish, apparat tugmalarini bosishni simulyatsiya qilish (Home, Back, Menu, Volume), quvvatni boshqarish, skrinshot olish va ma'lum ekran holatlarini kutish uchun metodlarni taqdim etadi. UiDevice test uchun bir marta yaratiladi va barcha operatsiyalar uchun qayta ishlatiladi.

UiSelector — UI elementlarini qidirish uchun fluent API. Espresso ViewMatchers-dan farqli o'laroq, UiSelector kompilyatsiyani talab qilmaydi — qidirish shartlari metodlar zanjiri orqali shakllantiriladi: text(), className(), description(), resourceId(), index(). Bir nechta shartlar avtomatik ravishda mantiqiy AND orqali birlashtiriladi.

UiSelector metodiVazifasi
text(String)Elementning aniq matni bo'yicha qidirish
textContains(String)Matn qismi bo'yicha qidirish
resourceId(String)Resurs ID si bo'yicha qidirish (mas. com.example:id/button)
className(String)View sinfi nomi bo'yicha qidirish
description(String)Content-description bo'yicha qidirish
childSelector(selector)Konternerda bola elementni qidirish

Bir nechta shartli qidirish misoli

Ekranda bir xil matnli bir nechta elementlar mavjud bo'lganda, UiSelector mezonlarni birlashtirishga imkon beradi: konternerni ID bo'yicha topish, keyin uning ichida — matn va sinf bo'yicha elementni topish. Bu kerakli komponentning noyob identifikatsiyasini ta'minlaydi. childSelector metodi qidirish maydonini belgilangan konternergacha toraytiradi, bu UI daraxti bo'ylab navigatsiyani tezlashtiradi.

kotlin
val scrollView = device.findObject(
    UiSelector().resourceId("android:id/list")
)

// Ro'yxat ichida “Wi-Fi” matnli elementni top
val wifiItem = scrollView.findObject(
    UiSelector().text("Wi-Fi")
wifiItem.click()

UI Automator bilan Cross-application testi

Cross-application (ilovalararo) test — UI Automator tanlanishining asosiy sababi bo'lgan asosiy funksiya. Framework ilovalar o'rtasida almashishi, brauzer orqali OAuth kirishini testlashi, tizim dialoglarini (ruxsatlar, ilova tanlash) tekshirishi va tizim holat paneli, bildirishnomalar paneli va qulflangan ekran bilan o'zaro aloqada bo'lishi mumkin.

OAuth kirishini testlash

Cross-app testining odatiy stsenariysi: ilova OAuth avtorizatsiyasi uchun brauzerni ochadi, foydalanuvchi login va parolni kiritadi, brauzer ilovaga qayta yo'naltiradi. UI Automator jarayonlar o'rtasida almashadi, brauzerda kiritish maydonlarini topadi, ularni to'ldiradi va “Kirish” tugmasini bosadi.

kotlin
// Brauzerning paydo bo'lishini kut
device.wait(Until.hasObject(
    UiSelector().packageName("com.android.chrome")
), 5000)

// Brauzerda email kiritish maydonini qidir
val emailField = device.findObject(
    UiSelector().className("android.widget.EditText").instance(0)
)
emailField.text = "user@example.com"

Tizim dialoglarini tekshirish

UI Automator tizim dialoglarini tekshirishi va yopishi mumkin — geolokatsiya ruxsatlari, bildirishnomalar, fayllarga kirish. Bu ilovaning birinchi ishga tushirilishini testlash uchun juda muhim, chunki tizim ketma-ket bir nechta ruxsatlarni so'raydi. UI Automatorsiz bunday stsenariylarni avtomatlashtirish mumkin emas, chunki tizim dialoglari ilova jarayoniga tegishli emas.

UI Automator vs Espresso: yondashuvlarni solishtirish

Tanlov UI Automator va Espresso o'rtasida test stsenariysiga bog'liq. Espresso avtomatik sinxronizatsiya va minimal boilerplate bilan bitta ilovani testlash uchun optimallashtirilgan. UI Automator tizim, brauzer yoki bir nechta ilovalar bilan o'zaro aloqa talab qiladigan stsenariylar uchun mos keladi.

MezonUI AutomatorEspresso
QamrovButun qurilma, bir nechta ilovalarBitta ilova
SinxronizatsiyaQo'lda (wait, sleep)Avtomatik (Idling Resource)
TezlikSekinroq (xizmat orqali kirish)Tezroq (jarayon ichida ishlaydi)
System UIQo'llab-quvvatlaydi (Notifications, Quick Settings)Qo'llab-quvvatlamaydi
Qidirish aniqligiAtributlar bo'yicha UiSelectorTur va iyerarxiya bo'yicha ViewMatchers
BarqarorlikPast (vaqtga bog'liq)Yuqori (avtomatik kutish)

Amalda, bu frameworklar ko'pincha birgalikda ishlatiladi: Espresso yuqori barqarorlik bilan asosiy ilovaning UI testlarini qamrab oladi, UI Automator esa ilova chegaralaridan tashqari stsenariylar — OAuth kirishi, tizim ruxsatlari, Share Intent bilan ishlash uchun ulanadi. Bunday kombinatsiya testlarni saqlash uchun minimal xarajat bilan maksimal UI qamrovini beradi.

Android loyihasida UI Automator sozlamalari

Ulanish UI Automator build.gradle ga bog'liqlik qo'shish orqali amalga oshiriladi. Framework AndroidX Test tarkibiga kiradi va manifestda qo'shimcha ruxsatlarni talab qilmaydi — Accessibility Service ga kirish instrumental test ishga tushganda avtomatik sozlanadi.

Gradle bog'liqliklari

Minimal konfiguratsiya uiautomator artefakti va standart AndroidJUnitRunner test runnerini o'z ichiga oladi. UI Automator testlari src/androidTest katalogiga joylashtiriladi va Android API 18+ bo'lgan emulator yoki jismoniy qurilmada ishga tushiriladi.

kotlin
dependencies {
    androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
    androidTestImplementation("androidx.test.ext:junit:1.2.1")
    androidTestImplementation("androidx.test:runner:1.6.1")
}

UiDevice va test konfiguratsiyasi

UiDevice nusxasini olish uchun InstrumentationRegistry.getInstrumentation() ishlatiladi. UiDevice qurilma resurslarini tejash uchun setUp() metodida bir marta yaratilishi va sinfning barcha testlarida qayta ishlatilishi kerak. Shuni hisobga olish kerakki, UiDevice thread-safe emas — barcha operatsiyalar test metodining bir oqimida bajarilishi kerak. Har bir testda yangi UiDevice yaratish qo'shimcha yuk va ijroning sekinlashishiga olib keladi. UiDevice ni beforeClass metodida bir marta yaratish va test sinfining barcha testlari uchun qayta ishlatish tavsiya etiladi.

UI Automatorda kutish

Espressodan farqli o'laroq, UI Automatorda avtomatik sinxronizatsiya mavjud emas. Elementlarning paydo bo'lishini kutish uchun UiDevice.wait(condition, timeout) metodi Until obyekti bilan ishlatiladi: Until.findObject(selector), Until.hasObject(selector), Until.gone(selector). To'g'ri kutishlarsiz testlar race condition sababli ishonchsiz bo'ladi — element qidirish vaqtigacha ekranda paydo bo'lmasligi mumkin. Barqarorlik uchun kamida 3-5 soniya kutish vaqtini belgilash tavsiya etiladi.

Tez-tez so'raladigan savollar

UI Automator Espressodan nimasi bilan farq qiladi?

UI Automator Accessibility Service darajasida ishlaydi va istalgan ilovalar bilan o'zaro aloqada bo'lishi mumkin. Espresso bitta ilova jarayoni ichida ishlaydi va UI oqimi bilan avtomatik sinxronizatsiyadan foydalanadi. UI Automator ilovalararo stsenariylar uchun yaxshiroq, Espresso — bitta ilovaning barqaror testlari uchun.

UI Automator istalgan qurilmada ishga tushirilishi mumkinmi?

Ha, UI Automator Android API 18+ bo'lgan barcha qurilmalarda ishlaydi. U root kirishni talab qilmaydi — testlar ishga tushirilganda Instrumentation orqali faollashtiriladigan standart Accessibility Service ishlatiladi.

UI Automator ekrandagi elementlarni qanday topadi?

UI Automator joriy ekranning to'liq UI komponentlar daraxtini olish uchun Accessibility Service-dan foydalanadi. Keyin UiSelector bu daraxtni aylanadi va berilgan mezonlarga ko'ra elementlarni topadi: matn, sinf, ID, content-description yoki ularning kombinatsiyasi.

UI Automator skrinshotlarni qo'llab-quvvatlaydimi?

Ha, UiDevice.takeScreenshot(storePath) metodi joriy ekranning skrinshotini olish va faylga saqlash imkonini beradi. Bu disk raskadrovka uchun foydali: test muvaffaqiyatsiz bo'lganda skrinshot saqlanishi va ekran holati tahlil qilinishi mumkin.

Nega UI Automator testlari ba'zan koddagi o'zgarishlarsiz muvaffaqiyatsiz bo'ladi?

UI Automatorda avtomatik sinxronizatsiya yo'q, shuning uchun testlar vaqtga sezgir. Agar animatsiya tugamagan bo'lsa yoki View render bo'lishga ulgurmagan bo'lsa, findObject elementni topa olmasligi mumkin. Yechim — yetarli timeout bilan UiDevice.wait() dan foydalanish.

Xulosa

UI Automator vositalar to'plami ilovalararo testlashning barcha asosiy stsenariylarini qamrab oladi va tizim darajasida Android avtomatlashtirish uchun standart hisoblanadi.

  • UI Automator — Accessibility Service orqali Android-ning ko'p ilovalik testi uchun framework.
  • UiDevice — qurilma va ekran elementlariga kirish uchun kirish nuqtasi.
  • UiSelector — elementlarni matn, ID, sinf va iyerarxiya bo'yicha qidirish uchun fluent API.
  • Cross-app testlari — OAuth kirishi, tizim ruxsatlari, bir nechta ilovalar bilan o'zaro aloqa.
  • Espresso bilan solishtirish — UI Automator qamrov jihatidan keng, lekin barqarorlik va tezlikda pas.
  • Kutish — test barqarorligi uchun UiDevice.wait() va Until shartlari majburiy.
  • API 18+ — framework Android 4.3 dan boshlab barcha qurilmalarni qo'llab-quvvatlaydi.

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.

Loyihani muhokama qilish

Shuningdek o'qing