UI Automator adalah framework pengujian UI yang cocok untuk pengujian UI fungsional lintas-aplikasi di seluruh sistem dan di aplikasi yang diinstal. UI Automator API memungkinkan Anda berinteraksi dengan elemen yang terlihat di perangkat, terlepas dari Activity
mana yang menjadi fokus, sehingga Anda dapat melakukan operasi seperti membuka menu Setelan atau peluncur aplikasi di perangkat pengujian. Pengujian Anda dapat mencari komponen UI dengan menggunakan deskriptor praktis seperti teks yang ditampilkan dalam komponen tersebut atau deskripsi kontennya.
Framework pengujian UI Automator adalah API berbasis instrumentasi dan berfungsi dengan runner pengujian AndroidJUnitRunner
. Alat ini cocok untuk menulis pengujian otomatis bergaya opaque box, karena kode pengujian tidak bergantung pada detail implementasi internal dari aplikasi target.
Fitur utama framework pengujian UI Automator meliputi:
- API untuk memperoleh informasi status dan melakukan operasi pada perangkat target. Untuk mengetahui informasi selengkapnya, lihat Mengakses status perangkat.
- API yang mendukung pengujian UI lintas-aplikasi. Untuk mengetahui informasi selengkapnya, lihat UI Automator API.
Mengakses status perangkat
Framework pengujian UI Automator menyediakan class UiDevice
untuk mengakses dan menjalankan operasi pada perangkat tempat aplikasi target dijalankan. Anda dapat memanggil metodenya untuk mengakses properti perangkat seperti orientasi saat ini atau ukuran layar. Class UiDevice
juga memungkinkan Anda melakukan tindakan berikut:
- Mengubah rotasi perangkat.
- Menekan tombol hardware, seperti "menaikkan volume".
- Menekan tombol Kembali, Layar Utama, atau Menu
- Membuka menu notifikasi
- Mengambil screenshot dari jendela saat ini.
Misalnya, untuk menyimulasikan penekanan tombol Layar utama, panggil metode UiDevice.pressHome()
.
UI Automator API
UI Automator API memungkinkan Anda untuk menulis pengujian yang kuat tanpa perlu mengetahui tentang detail implementasi dari aplikasi yang ditargetkan. Anda dapat menggunakan API ini untuk menangkap dan memanipulasi komponen UI pada beberapa aplikasi:
UiObject2
: Menyatakan elemen UI yang terlihat pada perangkat.BySelector
: Menentukan kriteria untuk mencocokkan elemen UI.By
: MembuatBySelector
secara ringkas.Configurator
: Memungkinkan Anda menetapkan parameter utama untuk menjalankan pengujian UI Automator.
Misalnya, kode berikut menunjukkan cara menulis skrip pengujian yang membuka aplikasi Gmail di perangkat:
Kotlin
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
device.pressHome()
val gmail: UiObject2 = device.findObject(By.text("Gmail"))
// Perform a click and wait until the app is opened.
val opened: Boolean = gmail.clickAndWait(Until.newWindow(), 3000)
assertThat(opened).isTrue()
Java
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
device.pressHome();
UiObject2 gmail = device.findObject(By.text("Gmail"));
// Perform a click and wait until the app is opened.
Boolean opened = gmail.clickAndWait(Until.newWindow(), 3000);
assertTrue(opened);
Menyiapkan UI Automator
Sebelum membuat pengujian UI dengan UI Automator, pastikan untuk mengonfigurasi lokasi kode sumber pengujian dan dependensi project Anda, seperti yang dijelaskan dalam Menyiapkan project untuk AndroidX Test.
Dalam file build.gradle
modul aplikasi Android, Anda harus menentukan referensi dependensi ke library UI Automator:
Kotlin
dependencies {
...
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
}
Groovy
dependencies {
...
androidTestImplementation "androidx.test.uiautomator:uiautomator:2.3.0"
}
Untuk mengoptimalkan pengujian UI Automator, langkah pertama yang harus Anda lakukan adalah memeriksa komponen UI aplikasi target dan memastikannya dapat diakses. Tips pengoptimalan ini dijelaskan dalam dua bagian berikutnya.
Memeriksa UI pada perangkat
Sebelum mendesain pengujian Anda, periksa komponen UI yang terlihat di
perangkat. Untuk memastikan bahwa pengujian UI Automator Anda dapat mengakses komponen ini, periksa apakah komponen ini memiliki label teks yang terlihat, nilai android:contentDescription
, atau keduanya.
Alat uiautomatorviewer
menyediakan antarmuka visual yang mudah digunakan untuk memeriksa hierarki tata letak dan melihat properti komponen UI yang terlihat di latar depan perangkat. Dengan informasi ini, Anda dapat membuat lebih banyak pengujian yang lebih terperinci menggunakan UI Automator. Misalnya, Anda dapat membuat pemilih UI yang cocok dengan properti tertentu yang dapat dilihat.
Untuk meluncurkan fitur uiautomatorviewer
:
- Luncurkan aplikasi target di perangkat fisik.
- Hubungkan perangkat ke mesin pengembangan Anda.
- Buka jendela terminal dan buka direktori
<android-sdk>/tools/
. - Jalankan fitur tersebut dengan perintah ini:
$ uiautomatorviewer
Untuk melihat properti UI untuk aplikasi Anda:
- Di antarmuka
uiautomatorviewer
, klik tombol Screenshot Perangkat. - Arahkan kursor ke snapshot di panel sebelah kiri untuk melihat komponen UI yang diidentifikasi oleh alat
uiautomatorviewer
. Properti dicantumkan di panel kanan bawah dan hierarki tata letak di panel kanan atas. - (Opsional) Klik tombol Toggle NAF Nodes untuk melihat komponen UI yang tidak dapat diakses oleh UI Automator. Hanya informasi terbatas yang mungkin tersedia untuk komponen ini.
Untuk mempelajari jenis umum komponen UI yang disediakan oleh Android, lihat Antarmuka Pengguna.
Memastikan aktivitas Anda dapat diakses
Framework pengujian UI Automator berperforma lebih baik pada aplikasi yang telah mengimplementasikan fitur aksesibilitas Android. Jika Anda menggunakan elemen UI dari jenis View
, atau
subclass View
dari SDK, Anda tidak perlu mengimplementasikan dukungan
aksesibilitas, karena class tersebut telah melakukannya untuk Anda.
Namun, beberapa aplikasi menggunakan elemen UI kustom untuk memberikan pengalaman pengguna yang lebih kaya.
Elemen tersebut tidak akan memberikan dukungan aksesibilitas secara otomatis. Jika aplikasi Anda berisi instance subclass dari View
yang bukan dari SDK, pastikan Anda menambahkan fitur aksesibilitas ke elemen ini dengan menyelesaikan langkah-langkah berikut:
- Buat class konkret yang memperluas ExploreByTouchHelper.
- Kaitkan instance class baru Anda dengan elemen UI kustom tertentu dengan memanggil setAccessibilityDelegate().
Untuk mendapatkan panduan tambahan terkait menambahkan fitur aksesibilitas ke elemen tampilan kustom, lihat Membuat Tampilan Kustom yang Dapat Diakses. Untuk mempelajari lebih lanjut praktik terbaik umum untuk aksesibilitas di Android, lihat Membuat Aplikasi Lebih Mudah Diakses.
Membuat class pengujian UI Automator
Class pengujian UI Automator Anda harus ditulis dengan cara yang sama seperti class pengujian JUnit 4. Untuk mempelajari lebih lanjut cara membuat class pengujian JUnit 4 serta menggunakan pernyataan dan anotasi JUnit 4, lihat Membuat Class Pengujian Unit Berinstrumen.
Tambahkan anotasi @RunWith(AndroidJUnit4.class) di awal definisi class pengujian Anda. Anda juga harus menentukan class AndroidJUnitRunner, yang disediakan di AndroidX Test, sebagai runner pengujian default Anda. Langkah ini dijelaskan lebih detail dalam Menjalankan pengujian UI Automator pada perangkat atau emulator.
Implementasikan model pemrograman berikut ke class pengujian UI Automator Anda:
- Dapatkan objek
UiDevice
untuk mengakses perangkat yang ingin Anda uji, dengan memanggil metode getInstance() dan meneruskan objek Instrumentation sebagai argumen. - Dapatkan objek
UiObject2
untuk mengakses komponen UI yang ditampilkan di perangkat (misalnya, tampilan saat ini di latar depan), dengan memanggil metode findObject(). - Simulasikan interaksi pengguna tertentu untuk dijalankan pada komponen UI tersebut, dengan memanggil metode
UiObject2
; misalnya, panggil scrollUntil() untuk men-scroll, dan setText() untuk mengedit kolom teks. Bila perlu, ulangi langkah 2 dan 3 untuk memanggil API guna menguji interaksi pengguna yang lebih kompleks yang melibatkan beberapa komponen UI atau serangkaian tindakan pengguna. - Periksa apakah UI mencerminkan status atau perilaku yang diharapkan, setelah interaksi pengguna ini dilakukan.
Langkah ini dibahas lebih detail di bagian di bawah ini.
Mengakses komponen UI
Objek UiDevice
adalah cara utama Anda mengakses dan memanipulasi status perangkat. Dalam pengujian, Anda dapat memanggil metode UiDevice
untuk memeriksa status berbagai properti, seperti orientasi saat ini atau ukuran tampilan.
Pengujian Anda dapat menggunakan objek UiDevice
untuk melakukan tindakan tingkat perangkat, seperti memaksa perangkat berpindah ke rotasi tertentu, menekan tombol fisik D-pad, dan menekan tombol Layar Utama dan Menu.
Sebaiknya mulai pengujian Anda dari Layar utama perangkat. Dari Layar utama (atau beberapa lokasi awal lain yang Anda pilih pada perangkat), Anda dapat memanggil metode yang disediakan oleh UI Automator API untuk memilih dan berinteraksi dengan elemen UI tertentu.
Cuplikan kode berikut menunjukkan cara pengujian Anda bisa mendapatkan instance UiDevice
dan menyimulasikan penekanan tombol Layar Utama:
Kotlin
import org.junit.Before
import androidx.test.runner.AndroidJUnit4
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.By
import androidx.test.uiautomator.Until
...
private const val BASIC_SAMPLE_PACKAGE = "com.example.android.testing.uiautomator.BasicSample"
private const val LAUNCH_TIMEOUT = 5000L
private const val STRING_TO_BE_TYPED = "UiAutomator"
@RunWith(AndroidJUnit4::class)
@SdkSuppress(minSdkVersion = 18)
class ChangeTextBehaviorTest2 {
private lateinit var device: UiDevice
@Before
fun startMainActivityFromHomeScreen() {
// Initialize UiDevice instance
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
// Start from the home screen
device.pressHome()
// Wait for launcher
val launcherPackage: String = device.launcherPackageName
assertThat(launcherPackage, notNullValue())
device.wait(
Until.hasObject(By.pkg(launcherPackage).depth(0)),
LAUNCH_TIMEOUT
)
// Launch the app
val context = ApplicationProvider.getApplicationContext<Context>()
val intent = context.packageManager.getLaunchIntentForPackage(
BASIC_SAMPLE_PACKAGE).apply {
// Clear out any previous instances
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
context.startActivity(intent)
// Wait for the app to appear
device.wait(
Until.hasObject(By.pkg(BASIC_SAMPLE_PACKAGE).depth(0)),
LAUNCH_TIMEOUT
)
}
}
Java
import org.junit.Before;
import androidx.test.runner.AndroidJUnit4;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.Until;
...
@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion = 18)
public class ChangeTextBehaviorTest {
private static final String BASIC_SAMPLE_PACKAGE
= "com.example.android.testing.uiautomator.BasicSample";
private static final int LAUNCH_TIMEOUT = 5000;
private static final String STRING_TO_BE_TYPED = "UiAutomator";
private UiDevice device;
@Before
public void startMainActivityFromHomeScreen() {
// Initialize UiDevice instance
device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
// Start from the home screen
device.pressHome();
// Wait for launcher
final String launcherPackage = device.getLauncherPackageName();
assertThat(launcherPackage, notNullValue());
device.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)),
LAUNCH_TIMEOUT);
// Launch the app
Context context = ApplicationProvider.getApplicationContext();
final Intent intent = context.getPackageManager()
.getLaunchIntentForPackage(BASIC_SAMPLE_PACKAGE);
// Clear out any previous instances
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
// Wait for the app to appear
device.wait(Until.hasObject(By.pkg(BASIC_SAMPLE_PACKAGE).depth(0)),
LAUNCH_TIMEOUT);
}
}
Dalam contoh ini, pernyataan @SdkSuppress(minSdkVersion = 18) membantu memastikan bahwa pengujian hanya akan berjalan pada perangkat yang menggunakan Android 4.3 (API level 18) atau lebih tinggi, seperti yang diwajibkan oleh framework UI Automator.
Gunakan metode findObject()
untuk mengambil UiObject2
yang merepresentasikan tampilan yang cocok dengan kriteria pemilih yang diberikan. Anda dapat menggunakan kembali instance UiObject2
yang telah Anda buat di bagian lain pengujian aplikasi, sesuai kebutuhan.
Perhatikan bahwa framework pengujian UI Automator menelusuri tampilan saat ini untuk menemukan kecocokan setiap kali pengujian Anda menggunakan instance UiObject2
untuk mengklik elemen UI atau membuat kueri properti.
Cuplikan berikut menunjukkan cara pengujian dapat membuat instance UiObject2
yang merepresentasikan tombol Batal dan tombol OK di aplikasi.
Kotlin
val okButton: UiObject2 = device.findObject(
By.text("OK").clazz("android.widget.Button")
)
// Simulate a user-click on the OK button, if found.
if (okButton != null) {
okButton.click()
}
Java
UiObject2 okButton = device.findObject(
By.text("OK").clazz("android.widget.Button")
);
// Simulate a user-click on the OK button, if found.
if (okButton != null) {
okButton.click();
}
Menentukan pemilih
Jika Anda ingin mengakses komponen UI tertentu dalam aplikasi, gunakan class By
untuk membuat instance BySelector
. BySelector
merepresentasikan kueri untuk elemen tertentu di UI yang ditampilkan.
Jika elemen pencocokan yang ditemukan lebih dari satu, elemen pencocokan pertama dalam hierarki tata letak ditampilkan sebagai target UiObject2
. Saat membuat
BySelector
, Anda dapat mengaitkan beberapa properti untuk mempersempit
penelusuran. Jika tidak ditemukan elemen UI yang cocok, null
akan ditampilkan.
Anda dapat menggunakan metode hasChild()
atau hasDescendant()
untuk menyarangkan
beberapa instance BySelector
. Misalnya, contoh kode berikut menunjukkan cara pengujian Anda dapat menentukan penelusuran untuk menemukan ListView
pertama yang memiliki elemen UI turunan dengan properti teks.
Kotlin
val listView: UiObject2 = device.findObject(
By.clazz("android.widget.ListView")
.hasChild(
By.text("Apps")
)
)
Java
UiObject2 listView = device.findObject(
By.clazz("android.widget.ListView")
.hasChild(
By.text("Apps")
)
);
Hal tersebut mungkin berguna untuk menentukan status objek dalam kriteria pemilih Anda. Misalnya, jika Anda ingin memilih daftar semua elemen yang dicentang sehingga Anda dapat menghapusnya, panggil metode checked()
dengan argumen yang ditetapkan ke benar (true).
Melakukan tindakan
Setelah pengujian Anda mendapatkan objek UiObject2
, Anda dapat memanggil metode di class UiObject2
untuk menjalankan interaksi pengguna pada komponen UI yang direpresentasikan oleh objek tersebut. Anda dapat menentukan tindakan seperti:
click()
: Mengklik di tengah bagian yang terlihat dari elemen UI.drag()
: Menarik objek ini ke koordinat arbitrer.setText()
: Menyetel teks dalam kolom yang dapat diedit, setelah menghapus konten kolom. Sebaliknya, metodeclear()
menghapus teks yang ada di kolom yang dapat diedit.swipe()
: Melakukan tindakan geser ke arah yang ditentukan.scrollUntil()
: Melakukan tindakan scroll ke arah yang ditentukan hinggaCondition
atauEventCondition
terpenuhi.
Framework pengujian UI Automator memungkinkan Anda mengirim Intent atau meluncurkan Activity tanpa menggunakan perintah shell, dengan mendapatkan objek Context melalui getContext()
.
Cuplikan berikut menunjukkan cara pengujian Anda dapat menggunakan Intent untuk meluncurkan aplikasi yang sedang diuji. Pendekatan ini berguna saat Anda hanya tertarik untuk menguji aplikasi kalkulator, dan tidak memerlukan peluncur.
Kotlin
fun setUp() {
...
// Launch a simple calculator app
val context = getInstrumentation().context
val intent = context.packageManager.getLaunchIntentForPackage(CALC_PACKAGE).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
// Clear out any previous instances
context.startActivity(intent)
device.wait(Until.hasObject(By.pkg(CALC_PACKAGE).depth(0)), TIMEOUT)
}
Java
public void setUp() {
...
// Launch a simple calculator app
Context context = getInstrumentation().getContext();
Intent intent = context.getPackageManager()
.getLaunchIntentForPackage(CALC_PACKAGE);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Clear out any previous instances
context.startActivity(intent);
device.wait(Until.hasObject(By.pkg(CALC_PACKAGE).depth(0)), TIMEOUT);
}
Memverifikasi hasil
InstrumentationTestCase memperluas TestCase, sehingga Anda dapat menggunakan metode Assert JUnit standar untuk menguji bahwa komponen UI dalam aplikasi menampilkan hasil yang diharapkan.
Cuplikan berikut menunjukkan cara pengujian Anda dapat menemukan beberapa tombol di aplikasi kalkulator, mengklik tombol tersebut secara berurutan, lalu memverifikasi bahwa hasil yang benar ditampilkan.
Kotlin
private const val CALC_PACKAGE = "com.myexample.calc"
fun testTwoPlusThreeEqualsFive() {
// Enter an equation: 2 + 3 = ?
device.findObject(By.res(CALC_PACKAGE, "two")).click()
device.findObject(By.res(CALC_PACKAGE, "plus")).click()
device.findObject(By.res(CALC_PACKAGE, "three")).click()
device.findObject(By.res(CALC_PACKAGE, "equals")).click()
// Verify the result = 5
val result: UiObject2 = device.findObject(By.res(CALC_PACKAGE, "result"))
assertEquals("5", result.text)
}
Java
private static final String CALC_PACKAGE = "com.myexample.calc";
public void testTwoPlusThreeEqualsFive() {
// Enter an equation: 2 + 3 = ?
device.findObject(By.res(CALC_PACKAGE, "two")).click();
device.findObject(By.res(CALC_PACKAGE, "plus")).click();
device.findObject(By.res(CALC_PACKAGE, "three")).click();
device.findObject(By.res(CALC_PACKAGE, "equals")).click();
// Verify the result = 5
UiObject2 result = device.findObject(By.res(CALC_PACKAGE, "result"));
assertEquals("5", result.getText());
}
Menjalankan pengujian UI Automator pada perangkat atau emulator
Anda dapat menjalankan pengujian UI Automator dari Android Studio atau dari command line. Pastikan untuk menentukan AndroidJUnitRunner
sebagai runner instrumentasi default di project Anda.
Contoh lainnya
Berinteraksi dengan UI Sistem
UI Automator dapat berinteraksi dengan semua hal di layar, termasuk elemen sistem di luar aplikasi Anda, seperti yang ditunjukkan dalam cuplikan kode berikut:
Kotlin
// Opens the System Settings. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) device.executeShellCommand("am start -a android.settings.SETTINGS")
Java
// Opens the System Settings. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); device.executeShellCommand("am start -a android.settings.SETTINGS");
Kotlin
// Opens the notification shade. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) device.openNotification()
Java
// Opens the notification shade. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); device.openNotification();
Kotlin
// Opens the Quick Settings shade. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) device.openQuickSettings()
Java
// Opens the Quick Settings shade. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); device.openQuickSettings();
Kotlin
// Get the system clock. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) UiObject2 clock = device.findObject(By.res("com.android.systemui:id/clock")) print(clock.getText())
Java
// Get the system clock. device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); UiObject2 clock = device.findObject(By.res("com.android.systemui:id/clock")); print(clock.getText());
Menunggu transisi

Transisi layar dapat memerlukan waktu dan durasinya tidak dapat diprediksi, jadi Anda harus membuat UI Automator menunggu setelah melakukan operasi. UI Automator menyediakan beberapa metode untuk melakukannya:
UiDevice.performActionAndWait(Runnable action, EventCondition<U> condition, long timeout)
: Misalnya, untuk mengklik tombol dan menunggu hingga jendela baru muncul, panggildevice.performActionAndWait(() -> button.click(), Until.newWindow(), timeout)
UiDevice.wait(Condition<Object, U> condition, long timeout)
: Misalnya, untuk menunggu hingga adaUiObject2
tertentu di perangkat, panggildevice.wait(Until.hasObject(By.text("my_text")), timeout);
UiObject2.wait(@NonNull Condition<Object, U> condition, long timeout)
: Misalnya, untuk menunggu hingga kotak centang dicentang, panggilcheckbox.wait(Until.checked(true), timeout);
UiObject2.clickAndWait(@NonNull EventCondition<U> condition, long timeout)
: Misalnya, untuk mengklik tombol dan menunggu hingga jendela baru muncul, panggilbutton.clickAndWait(Until.newWindow(), timeout);
UiObject2.scrollUntil(@NonNull Direction direction, @NonNull Condition<Object, U> condition)
: Misalnya, untuk men-scroll ke bawah hingga objek baru muncul, panggilobject.scrollUntil(Direction.DOWN, Until.hasObject(By.text('new_obj')));
UiObject2.scrollUntil(@NonNull Direction direction, @NonNull EventCondition<U> condition)
: Misalnya, untuk men-scroll ke bawah, panggilobject.scrollUntil(Direction.DOWN, Until.scrollFinished(Direction.DOWN));
Cuplikan kode berikut menunjukkan cara menggunakan UI Automator untuk menonaktifkan mode Jangan Ganggu di setelan Sistem menggunakan metode performActionAndWait()
yang menunggu transisi:
Kotlin
@Test @SdkSuppress(minSdkVersion = 21) @Throws(Exception::class) fun turnOffDoNotDisturb() { device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) device.performActionAndWait({ try { device.executeShellCommand("am start -a android.settings.SETTINGS") } catch (e: IOException) { throw RuntimeException(e) } }, Until.newWindow(), 1000) // Check system settings has been opened. Assert.assertTrue(device.hasObject(By.pkg("com.android.settings"))) // Scroll the settings to the top and find Notifications button var scrollableObj: UiObject2 = device.findObject(By.scrollable(true)) scrollableObj.scrollUntil(Direction.UP, Until.scrollFinished(Direction.UP)) val notificationsButton = scrollableObj.findObject(By.text("Notifications")) // Click the Notifications button and wait until a new window is opened. device.performActionAndWait({ notificationsButton.click() }, Until.newWindow(), 1000) scrollableObj = device.findObject(By.scrollable(true)) // Scroll down until it finds a Do Not Disturb button. val doNotDisturb = scrollableObj.scrollUntil( Direction.DOWN, Until.findObject(By.textContains("Do Not Disturb")) ) device.performActionAndWait({ doNotDisturb.click() }, Until.newWindow(), 1000) // Turn off the Do Not Disturb. val turnOnDoNotDisturb = device.findObject(By.text("Turn on now")) turnOnDoNotDisturb?.click() Assert.assertTrue(device.wait(Until.hasObject(By.text("Turn off now")), 1000)) }
Java
@Test @SdkSuppress(minSdkVersion = 21) public void turnOffDoNotDisturb() throws Exception{ device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); device.performActionAndWait(() -> { try { device.executeShellCommand("am start -a android.settings.SETTINGS"); } catch (IOException e) { throw new RuntimeException(e); } }, Until.newWindow(), 1000); // Check system settings has been opened. assertTrue(device.hasObject(By.pkg("com.android.settings"))); // Scroll the settings to the top and find Notifications button UiObject2 scrollableObj = device.findObject(By.scrollable(true)); scrollableObj.scrollUntil(Direction.UP, Until.scrollFinished(Direction.UP)); UiObject2 notificationsButton = scrollableObj.findObject(By.text("Notifications")); // Click the Notifications button and wait until a new window is opened. device.performActionAndWait(() -> notificationsButton.click(), Until.newWindow(), 1000); scrollableObj = device.findObject(By.scrollable(true)); // Scroll down until it finds a Do Not Disturb button. UiObject2 doNotDisturb = scrollableObj.scrollUntil(Direction.DOWN, Until.findObject(By.textContains("Do Not Disturb"))); device.performActionAndWait(()-> doNotDisturb.click(), Until.newWindow(), 1000); // Turn off the Do Not Disturb. UiObject2 turnOnDoNotDisturb = device.findObject(By.text("Turn on now")); if(turnOnDoNotDisturb != null) { turnOnDoNotDisturb.click(); } assertTrue(device.wait(Until.hasObject(By.text("Turn off now")), 1000)); }
Referensi lainnya
Untuk mengetahui informasi selengkapnya tentang penggunaan UI Automator dalam pengujian Android, lihat referensi berikut.
Dokumen referensi:
Contoh
- BasicSample: Contoh dasar UI Automator.