UI Automator: wat is het, kernconcepten en hoe werkt het

Auteur: IT Sectr Gepubliceerd: 2026-04-08 Leestijd: 8 min

UI Automator is een framework van Google voor geautomatiseerd UI-testen van Android-applicaties, dat op systeemniveau werkt en kan interacteren met interface-elementen buiten een applicatie. In tegenstelling tot Espresso is UI Automator niet gebonden aan het proces van een specifieke applicatie: het kan systeemdialogen openen, het meldingenpaneel bedienen en schakelen tussen applicaties. Volgens Google Android Developers gebruikt UI Automator de standaard Accessibility Service voor toegang tot de UI-boom van het apparaat.

Belangrijkste punten

  • UI Automator — framework voor cross-applicatie UI-testen van Android.
  • UiDevice — toegangspunt voor toegang tot het apparaatscherm en zijn elementen.
  • UiSelector — mechanisme voor het zoeken van elementen op tekst, klasse, beschrijving en hiërarchie.
  • Cross-application — tests kunnen schakelen tussen Settings, Browser en de geteste applicatie.
  • Accessibility Service — UI Automator gebruikt het voor het lezen en manipuleren van de UI-boom.

Wat is UI Automator?

UI Automator is een framework voor functioneel UI-testen van Android dat op het niveau van het besturingssysteem werkt. Het biedt een API voor toegang tot elk element op het apparaatscherm, ongeacht tot welke applicatie het behoort — inclusief de systeemstatusbalk, machtigingsdialogen, het startscherm en applicaties van derden. Dit maakt het onmisbaar voor het testen van scenario’s die buiten een applicatie vallen.

Architectonisch gebruikt UI Automator Accessibility Service — dezelfde service die wordt gebruikt door TalkBack, Switch Access en andere toegankelijkheidstools. Via deze service krijgt het framework de volledige boom van UI-componenten van het huidige scherm en kan het acties op hen uitvoeren: klikken, vegen, tekst invoeren, lang indrukken.

UI Automator verscheen voor het eerst in Android 4.3 (API 18) en is sindsdien onderdeel van de Android Testing Support Library als het officiële Google-hulpmiddel voor cross-applicatie testen. In AndroidX Test is het beschikbaar als een apart artefact androidx.test.uiautomator:uiautomator versie 2.3.0 (2024), dat alle Android-versies vanaf API 18 ondersteunt.

Hoe werkt UI Automator

Werkingsprincipe van UI Automator is gebaseerd op het scannen van de Accessibility-boom van het huidige scherm. Bij het aanroepen van de methode findObject(selector) doorloopt het framework de View-hiërarchie, vindt het eerste element dat voldoet aan de UiSelector-voorwaarden en retourneert een UiObject — een proxy voor interactie met de echte View.

Levenscyclus van een UI Automator-test

Een typische UI Automator-test begint met het verkrijgen van een UiDevice-instantie, die het fysieke apparaat vertegenwoordigt. UiDevice biedt methoden voor het zoeken van elementen, het beheren van knopdrukken (Home, Back, Recent), het roteren van het scherm en het maken van screenshots. Nadat het element via UiSelector is gevonden, worden acties op UiObject uitgevoerd.

Basisvoorbeeld

In het onderstaande voorbeeld opent de test de app Settings, vindt het item „Batterij“ via tekst en klikt erop. UI Automator vereist niet dat er een Activity wordt gestart — het werkt met elk scherm van het apparaat, inclusief apps van derden.

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

// Open het instellingenscherm
device.pressHome()
device.wait(Until.hasObject(UiSelector().text("Instellingen")), 2000)

// Vind het item „Batterij“ en klik
val batteryItem = device.findObject(
    UiSelector().text("Batterij")
)
batteryItem.clickAndWait(Until.newWindow(), 3000)

UiDevice en UiSelector: kernklassen

UiDevice — de hoofdklasse voor interactie met het apparaat. Het biedt methoden voor het zoeken van elementen, het simuleren van hardwareknopdrukken (Home, Back, Menu, Volume), energiebeheer, screenshots en het wachten op bepaalde schermtoestanden. UiDevice wordt één keer per test gemaakt en hergebruikt voor alle bewerkingen.

UiSelector — een fluent API voor het zoeken van UI-elementen. In tegenstelling tot Espresso ViewMatchers vereist UiSelector geen compilatie — zoekvoorwaarden worden gevormd door een keten van methoden: text(), className(), description(), resourceId(), index(). Meerdere voorwaarden worden automatisch gecombineerd via logische AND.

UiSelector-methodeDoel
text(String)Zoeken op exacte tekst van het element
textContains(String)Zoeken op een deel van de tekst
resourceId(String)Zoeken op resource-ID (bijv. com.example:id/button)
className(String)Zoeken op de klassenaam van de View
description(String)Zoeken op content-description
childSelector(selector)Zoeken van een onderliggend element in een container

Voorbeeld van zoeken met meerdere voorwaarden

Wanneer er meerdere elementen met dezelfde tekst op het scherm zijn, stelt UiSelector het combineren van criteria mogelijk: de container vinden op ID, vervolgens daarbinnen — het element op tekst en klasse. Dit garandeert de unieke identificatie van de benodigde component. De methode childSelector beperkt het zoekgebied tot de opgegeven container, wat de navigatie door de UI-boom versnelt.

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

// Zoek in de lijst het element met de tekst „Wi-Fi“
val wifiItem = scrollView.findObject(
    UiSelector().text("Wi-Fi")
wifiItem.click()

Cross-application testen met UI Automator

Cross-application (tussen applicaties) testen — de belangrijkste functie waarvoor UI Automator wordt gekozen. Het framework kan schakelen tussen applicaties, OAuth-login via de browser testen, systeemdialogen (machtigingen, applicatieselectie) controleren en interacteren met de systeemstatusbalk, het meldingenpaneel en het vergrendelscherm.

OAuth-login testen

Een typisch cross-app testscenario: de app opent de browser voor OAuth-autorisatie, de gebruiker voert gebruikersnaam en wachtwoord in, de browser verwijst terug naar de app. UI Automator schakelt tussen processen, vindt invoervelden in de browser, vult ze in en klikt op „Inloggen“.

kotlin
// Wachten op het verschijnen van de browser
device.wait(Until.hasObject(
    UiSelector().packageName("com.android.chrome")
), 5000)

// Zoek het e-mailinvoerveld in de browser
val emailField = device.findObject(
    UiSelector().className("android.widget.EditText").instance(0)
)
emailField.text = "user@example.com"

Systeemdialogen controleren

UI Automator kan systeemdialogen controleren en sluiten — machtigingen voor geolocatie, meldingen, toegang tot bestanden. Dit is cruciaal voor het testen van de eerste keer opstarten van de app, wanneer het systeem achtereenvolgens meerdere machtigingen vraagt. Zonder UI Automator kunnen dergelijke scenario’s niet worden geautomatiseerd omdat systeemdialogen niet tot het proces van de app behoren.

UI Automator vs Espresso: vergelijking van benaderingen

De keuze tussen UI Automator en Espresso hangt af van het testscenario. Espresso is geoptimaliseerd voor het testen van één applicatie met automatische synchronisatie en minimale boilerplate. UI Automator is geschikt voor scenario’s waarbij interactie met het systeem, de browser of meerdere applicaties nodig is.

CriteriumUI AutomatorEspresso
BereikHele apparaat, meerdere applicatiesÉén applicatie
SynchronisatieHandmatig (wait, sleep)Automatisch (Idling Resource)
SnelheidLangzamer (toegang via service)Sneller (werkt binnen proces)
System UIOndersteunt (Notifications, Quick Settings)Ondersteunt niet
ZoeknauwkeurigheidUiSelector op attributenViewMatchers op type en hiërarchie
StabiliteitLager (afhankelijk van timing)Hoger (automatisch wachten)

In de praktijk worden deze frameworks vaak samen gebruikt: Espresso dekt de UI-tests van de hoofdapplicatie met hoge stabiliteit, en UI Automator wordt ingezet voor scenario’s die buiten de grenzen van de applicatie vallen — OAuth-login, systeemmachtigingen, werken met Share Intent. Deze combinatie geeft maximale UI-dekking met minimale onderhoudskosten voor tests.

UI Automator instellen in een Android-project

Aansluiten van UI Automator gebeurt door het toevoegen van een afhankelijkheid in build.gradle. Het framework maakt deel uit van AndroidX Test en vereist geen extra machtigingen in het manifest — toegang tot de Accessibility Service wordt automatisch geconfigureerd bij het starten van de instrumentele test.

Gradle-afhankelijkheden

De minimale configuratie omvat het artefact uiautomator en de standaard testrunner AndroidJUnitRunner. UI Automator-tests worden geplaatst in de map src/androidTest en uitgevoerd op een emulator of fysiek apparaat met 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 en testconfiguratie

Voor het verkrijgen van een UiDevice-instantie wordt InstrumentationRegistry.getInstrumentation() gebruikt. UiDevice moet één keer worden gemaakt in de setUp()-methode en worden hergebruikt in alle tests van de klasse om apparaatbronnen te sparen. Het is belangrijk om te onthouden dat UiDevice niet thread-safe is — alle bewerkingen moeten in één thread van de testmethode worden uitgevoerd. Het maken van een nieuwe UiDevice in elke test leidt tot overhead en vertraging van de uitvoering. Het wordt aanbevolen om UiDevice één keer te maken in de beforeClass-methode en te hergebruiken voor alle tests van de testklasse.

Wachten in UI Automator

In tegenstelling tot Espresso heeft UI Automator geen automatische synchronisatie. Voor het wachten op het verschijnen van elementen wordt de methode UiDevice.wait(condition, timeout) gebruikt met het object Until: Until.findObject(selector), Until.hasObject(selector), Until.gone(selector). Zonder correct wachten worden tests onstabiel door race conditions — het element kan mogelijk niet op het scherm verschijnen op het moment van zoeken. Het wordt aanbevolen om een timeout van ten minste 3-5 seconden in te stellen voor stabiliteit.

Veelgestelde vragen

Waarin verschilt UI Automator van Espresso?

UI Automator werkt op het niveau van Accessibility Service en kan met elke applicatie interacteren. Espresso werkt binnen het proces van één applicatie en gebruikt automatische synchronisatie met de UI-thread. UI Automator is beter voor cross-applicatie scenario’s, Espresso — voor stabiele tests van één applicatie.

Kan UI Automator op elk apparaat worden uitgevoerd?

Ja, UI Automator werkt op alle apparaten met Android API 18+. Het vereist geen root-toegang — de standaard Accessibility Service wordt gebruikt, die via Instrumentation wordt geactiveerd bij het starten van tests.

Hoe vindt UI Automator elementen op het scherm?

UI Automator gebruikt Accessibility Service om de volledige boom van UI-componenten van het huidige scherm te verkrijgen. Vervolgens doorloopt UiSelector deze boom en vindt elementen op basis van de opgegeven criteria: tekst, klasse, ID, content-description of een combinatie daarvan.

Ondersteunt UI Automator screenshots?

Ja, de methode UiDevice.takeScreenshot(storePath) maakt het mogelijk een screenshot van het huidige scherm te maken en op te slaan in een bestand. Dit is handig voor debugging: bij het falen van een test kan de screenshot worden opgeslagen en de schermtoestand worden geanalyseerd.

Waarom falen UI Automator-tests soms zonder code-wijzigingen?

UI Automator heeft geen automatische synchronisatie, waardoor tests gevoelig zijn voor timing. Als een animatie niet is voltooid of een View niet op tijd is gerenderd, kan findObject het element mogelijk niet vinden. Oplossing — gebruik UiDevice.wait() met voldoende timeout.

Samenvatting

De UI Automator-toolset dekt alle belangrijke cross-applicatie testscenario’s en is de standaard voor Android-automatisering op systeemniveau.

  • UI Automator — framework voor cross-applicatie Android-testen via Accessibility Service.
  • UiDevice — toegangspunt voor toegang tot het apparaat en schermelementen.
  • UiSelector — fluent API voor het zoeken van elementen op tekst, ID, klasse en hiërarchie.
  • Cross-app tests — OAuth-login, systeemmachtigingen, interactie met meerdere applicaties.
  • Vergelijking met Espresso — UI Automator is breder in bereik, maar verliest in stabiliteit en snelheid.
  • Wachten — voor teststabiliteit zijn UiDevice.wait() en Until-voorwaarden verplicht.
  • API 18+ — framework ondersteunt alle apparaten vanaf Android 4.3.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook