UI Automator: apa itu, konsep kunci dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-04-08 Waktu membaca: 8 mnt

UI Automator adalah framework dari Google untuk pengujian UI otomatis aplikasi Android, yang bekerja di tingkat sistem dan dapat berinteraksi dengan elemen antarmuka di luar satu aplikasi. Tidak seperti Espresso, UI Automator tidak terikat pada proses aplikasi tertentu: ia dapat membuka dialog sistem, panel notifikasi, dan beralih antar aplikasi. Menurut Google Android Developers, UI Automator menggunakan Accessibility Service standar untuk mengakses pohon UI perangkat.

Poin Penting

  • UI Automator — framework untuk pengujian UI lintas-aplikasi Android.
  • UiDevice — titik masuk untuk mengakses layar perangkat dan elemen-elemennya.
  • UiSelector — mekanisme pencarian elemen berdasarkan teks, kelas, deskripsi, dan hierarki.
  • Cross-application — pengujian dapat beralih antara Settings, Browser, dan aplikasi yang diuji.
  • Accessibility Service — UI Automator menggunakannya untuk membaca dan memanipulasi pohon UI.

Apa itu UI Automator?

UI Automator adalah framework untuk pengujian UI fungsional Android yang bekerja di tingkat sistem operasi. Framework ini menyediakan API untuk mengakses elemen apa pun di layar perangkat, terlepas dari aplikasi mana elemen tersebut berada — termasuk bilah status sistem, dialog izin, layar beranda, dan aplikasi pihak ketiga. Hal ini membuatnya sangat diperlukan untuk menguji skenario yang melampaui satu aplikasi.

Secara arsitektur, UI Automator menggunakan Accessibility Service — layanan yang sama yang digunakan oleh TalkBack, Switch Access, dan alat aksesibilitas lainnya. Melalui layanan ini, framework mendapatkan pohon lengkap komponen UI dari layar saat ini dan memungkinkan eksekusi tindakan pada mereka: klik, geser, input teks, tekan lama.

UI Automator pertama kali muncul di Android 4.3 (API 18) dan sejak saat itu menjadi bagian dari Android Testing Support Library sebagai alat resmi Google untuk pengujian lintas-aplikasi. Di AndroidX Test, tersedia sebagai artefak terpisah androidx.test.uiautomator:uiautomator versi 2.3.0 (2024), yang mendukung semua versi Android dari API 18.

Cara Kerja UI Automator

Prinsip kerja UI Automator didasarkan pada pemindaian pohon Accessibility dari layar saat ini. Ketika metode findObject(selector) dipanggil, framework menelusuri hierarki View, menemukan elemen pertama yang memenuhi kondisi UiSelector, dan mengembalikan objek UiObject — sebuah proxy untuk berinteraksi dengan View yang sebenarnya.

Siklus Hidup Pengujian UI Automator

Pengujian UI Automator yang tipikal dimulai dengan mendapatkan instance UiDevice, yang mewakili perangkat fisik. UiDevice menyediakan metode untuk mencari elemen, mengelola penekanan tombol (Home, Back, Recent), memutar layar, dan mengambil tangkapan layar. Setelah elemen ditemukan melalui UiSelector, tindakan dilakukan pada UiObject.

Contoh Dasar

Pada contoh di bawah, pengujian membuka aplikasi Settings, menemukan item “Baterai” melalui teks, dan menekannya. UI Automator tidak memerlukan Activity untuk dimulai — ia bekerja dengan layar perangkat apa pun, termasuk aplikasi pihak ketiga.

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

// Buka layar pengaturan
device.pressHome()
device.wait(Until.hasObject(UiSelector().text("Pengaturan")), 2000)

// Temukan item “Baterai” dan tekan
val batteryItem = device.findObject(
    UiSelector().text("Baterai")
)
batteryItem.clickAndWait(Until.newWindow(), 3000)

UiDevice dan UiSelector: Kelas Kunci

UiDevice — kelas utama untuk berinteraksi dengan perangkat. Ini menyediakan metode untuk mencari elemen, mensimulasikan penekanan tombol hardware (Home, Back, Menu, Volume), mengelola daya, mengambil tangkapan layar, dan menunggu status layar tertentu. UiDevice dibuat sekali per pengujian dan digunakan kembali untuk semua operasi.

UiSelector — adalah fluent API untuk mencari elemen UI. Tidak seperti ViewMatchers di Espresso, UiSelector tidak memerlukan kompilasi — kondisi pencarian dibentuk melalui rantai metode: text(), className(), description(), resourceId(), index(). Beberapa kondisi digabungkan secara otomatis melalui AND logis.

Metode UiSelectorTujuan
text(String)Pencarian berdasarkan teks tepat elemen
textContains(String)Pencarian berdasarkan sebagian teks
resourceId(String)Pencarian berdasarkan ID sumber daya (mis. com.example:id/button)
className(String)Pencarian berdasarkan nama kelas View
description(String)Pencarian berdasarkan content-description
childSelector(selector)Pencarian elemen anak di dalam wadah

Contoh Pencarian dengan Beberapa Kondisi

Ketika ada beberapa elemen dengan teks yang sama di layar, UiSelector memungkinkan penggabungan kriteria: menemukan wadah berdasarkan ID, kemudian di dalamnya — elemen berdasarkan teks dan kelas. Ini menjamin identifikasi unik dari komponen yang diperlukan. Metode childSelector mempersempit area pencarian ke wadah yang ditentukan, yang mempercepat navigasi melalui pohon UI.

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

// Di dalam daftar, temukan elemen dengan teks “Wi-Fi”
val wifiItem = scrollView.findObject(
    UiSelector().text("Wi-Fi")
wifiItem.click()

Pengujian Cross-application dengan UI Automator

Cross-application (pengujian antar-aplikasi) — fungsi utama mengapa UI Automator dipilih. Framework dapat beralih antar aplikasi, menguji login OAuth melalui browser, memeriksa dialog sistem (izin, pemilihan aplikasi), dan berinteraksi dengan bilah status sistem, panel notifikasi, dan layar kunci.

Pengujian Login OAuth

Skenario khas pengujian cross-app: aplikasi membuka browser untuk otorisasi OAuth, pengguna memasukkan nama pengguna dan kata sandi, browser mengarahkan kembali ke aplikasi. UI Automator beralih antar proses, menemukan bidang input di browser, mengisinya, dan menekan “Masuk”.

kotlin
// Menunggu browser muncul
device.wait(Until.hasObject(
    UiSelector().packageName("com.android.chrome")
), 5000)

// Cari bidang input email di browser
val emailField = device.findObject(
    UiSelector().className("android.widget.EditText").instance(0)
)
emailField.text = "user@example.com"

Memeriksa Dialog Sistem

UI Automator dapat memeriksa dan menutup dialog sistem — izin geolokasi, notifikasi, akses ke file. Ini sangat penting untuk menguji peluncuran pertama aplikasi, ketika sistem secara berurutan meminta beberapa izin. Tanpa UI Automator, skenario seperti itu tidak dapat diotomatisasi karena dialog sistem bukan milik proses aplikasi.

UI Automator vs Espresso: Perbandingan Pendekatan

Pilihan antara UI Automator dan Espresso tergantung pada skenario pengujian. Espresso dioptimalkan untuk menguji satu aplikasi dengan sinkronisasi otomatis dan boilerplate minimal. UI Automator cocok untuk skenario yang memerlukan interaksi dengan sistem, browser, atau beberapa aplikasi.

KriteriaUI AutomatorEspresso
CakupanSeluruh perangkat, banyak aplikasiSatu aplikasi
SinkronisasiManual (wait, sleep)Otomatis (Idling Resource)
KecepatanLebih lambat (akses melalui layanan)Lebih cepat (bekerja di dalam proses)
System UIMendukung (Notifications, Quick Settings)Tidak mendukung
Akurasi PencarianUiSelector berdasarkan atributViewMatchers berdasarkan tipe dan hierarki
StabilitasLebih rendah (tergantung waktu)Lebih tinggi (penantian otomatis)

Dalam praktiknya, framework ini sering digunakan bersama: Espresso mencakup pengujian UI aplikasi utama dengan stabilitas tinggi, dan UI Automator digunakan untuk skenario di luar batas aplikasi — login OAuth, izin sistem, bekerja dengan Share Intent. Kombinasi ini memberikan cakupan UI maksimal dengan biaya pemeliharaan pengujian minimal.

Konfigurasi UI Automator di Proyek Android

Koneksi UI Automator dilakukan dengan menambahkan dependensi di build.gradle. Framework ini adalah bagian dari AndroidX Test dan tidak memerlukan izin tambahan di manifes — akses ke Accessibility Service dikonfigurasi secara otomatis saat pengujian instrumental dimulai.

Dependensi Gradle

Konfigurasi minimal mencakup artefak uiautomator dan runner pengujian standar AndroidJUnitRunner. Pengujian UI Automator ditempatkan di direktori src/androidTest dan dijalankan pada emulator atau perangkat fisik dengan Android API 18+.

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 dan Konfigurasi Pengujian

Untuk mendapatkan instance UiDevice, digunakan InstrumentationRegistry.getInstrumentation(). UiDevice harus dibuat sekali dalam metode setUp() dan digunakan kembali di semua pengujian kelas untuk menghemat sumber daya perangkat. Penting untuk diingat bahwa UiDevice tidak thread-safe — semua operasi harus dilakukan dalam satu thread dari metode pengujian. Membuat UiDevice baru di setiap pengujian menyebabkan overhead dan memperlambat eksekusi. Disarankan untuk membuat UiDevice sekali dalam metode beforeClass dan menggunakannya kembali untuk semua pengujian kelas pengujian.

Penantian di UI Automator

Tidak seperti Espresso, UI Automator tidak memiliki sinkronisasi otomatis. Untuk menunggu kemunculan elemen, digunakan metode UiDevice.wait(condition, timeout) dengan objek Until: Until.findObject(selector), Until.hasObject(selector), Until.gone(selector). Tanpa penantian yang benar, pengujian menjadi tidak stabil karena race condition — elemen mungkin tidak muncul di layar pada saat pencarian. Disarankan untuk mengatur waktu tunggu setidaknya 3-5 detik untuk stabilitas.

Pertanyaan yang Sering Diajukan

Apa perbedaan UI Automator dengan Espresso?

UI Automator bekerja di tingkat Accessibility Service dan dapat berinteraksi dengan aplikasi apa pun. Espresso bekerja di dalam proses satu aplikasi dan menggunakan sinkronisasi otomatis dengan thread UI. UI Automator lebih baik untuk skenario antar-aplikasi, Espresso — untuk pengujian stabil satu aplikasi.

Bisakah UI Automator dijalankan di perangkat apa pun?

Ya, UI Automator bekerja di semua perangkat dengan Android API 18+. Ini tidak memerlukan akses root — Accessibility Service standar digunakan, yang diaktifkan melalui Instrumentation saat pengujian dimulai.

Bagaimana UI Automator menemukan elemen di layar?

UI Automator menggunakan Accessibility Service untuk mendapatkan pohon lengkap komponen UI dari layar saat ini. Kemudian UiSelector menelusuri pohon ini dan menemukan elemen berdasarkan kriteria yang diberikan: teks, kelas, ID, content-description, atau kombinasinya.

Apakah UI Automator mendukung tangkapan layar?

Ya, metode UiDevice.takeScreenshot(storePath) memungkinkan pengambilan tangkapan layar dari layar saat ini dan menyimpannya ke file. Ini berguna untuk debugging: ketika pengujian gagal, tangkapan layar dapat disimpan dan status layar dapat dianalisis.

Mengapa pengujian UI Automator terkadang gagal tanpa perubahan kode?

UI Automator tidak memiliki sinkronisasi otomatis, sehingga pengujian sensitif terhadap waktu. Jika animasi belum selesai atau View belum sempat dirender, findObject mungkin tidak menemukan elemen. Solusinya — gunakan UiDevice.wait() dengan waktu tunggu yang cukup.

Kesimpulan

Seperangkat alat UI Automator mencakup semua skenario kunci pengujian antar-aplikasi dan merupakan standar untuk otomatisasi Android di tingkat sistem.

  • UI Automator — framework untuk pengujian lintas-aplikasi Android melalui Accessibility Service.
  • UiDevice — titik masuk untuk mengakses perangkat dan elemen layar.
  • UiSelector — fluent API untuk mencari elemen berdasarkan teks, ID, kelas, dan hierarki.
  • Pengujian cross-app — login OAuth, izin sistem, interaksi dengan banyak aplikasi.
  • Perbandingan dengan Espresso — UI Automator lebih luas cakupannya, tetapi kalah dalam stabilitas dan kecepatan.
  • Penantian — untuk stabilitas pengujian, UiDevice.wait() dan kondisi Until wajib digunakan.
  • API 18+ — framework mendukung semua perangkat dari Android 4.3.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga