UI Automator is a UI testing framework suitable for cross-app functional UI testing across system and installed apps.
The UI Automator testing framework provides a set of APIs to build UI tests that perform interactions on user apps and system apps. The UI Automator APIs allows you to perform operations such as opening the Settings menu or the app launcher in a test device. The UI Automator testing framework is well-suited for writing black box-style automated tests, where the test code does not rely on internal implementation details of the target app.
The key features of the UI Automator testing framework include the following:
- A viewer to inspect layout hierarchy. For more information, see UI Automator Viewer.
- An API to retrieve state information and perform operations on the target device. For more information, see Accessing device state.
- APIs that support cross-app UI testing. For more information, see UI Automator APIs.
UI Automator viewer
uiautomatorviewer tool provides a convenient GUI to scan and analyze the
UI components currently displayed on an Android device. You can use this tool to
inspect the layout hierarchy and view the properties of UI components that are
visible on the foreground of the device. This information lets you create more
fine-grained tests using UI Automator, for example by creating a UI selector
that matches a specific visible property.
uiautomatorviewer tool is located in the
Accessing device state
The UI Automator testing framework provides a
UiDevice class to access and
perform operations on the device on which the target app is running. You can
call its methods to access device properties such as current orientation or
display size. The
UiDevice class also let you
perform actions such as:
- Change the device rotation.
- Press a hardware key, such as "volume up".
- Press the Back, Home, or Menu buttons.
- Open the notification shade.
- Take a screenshot of the current window.
For example, to simulate a Home button press, call the
UI Automator APIs
The UI Automator APIs allow you to write robust tests without needing to know about the implementation details of the app that you are targeting. You can use these APIs to capture and manipulate UI components across multiple apps:
UiCollection: Enumerates a container's UI elements for the purpose of counting, or targeting sub-elements by their visible text or content-description property.
UiObject: Represents a UI element that is visible on the device.
UiScrollable: Provides support for searching for items in a scrollable UI container.
UiSelector: Represents a query for one or more target UI elements on a device.
Configurator: Allows you to set key parameters for running UI Automator tests.
For example, the following code shows how you can write a test script that displays the default app launcher in the device:
device = UiDevice.getInstance(getInstrumentation()) device.pressHome() // Bring up the default launcher by searching for a UI component // that matches the content description for the launcher button. val allAppsButton: UIObject = device.findObject( UiSelector().description("Apps")) // Perform a click on the button to load the launcher. allAppsButton.clickAndWaitForNewWindow()
mDevice = UiDevice.getInstance(getInstrumentation()); mDevice.pressHome(); // Bring up the default launcher by searching for a UI component // that matches the content description for the launcher button. UiObject allAppsButton = mDevice .findObject(new UiSelector().description("Apps")); // Perform a click on the button to load the launcher. allAppsButton.clickAndWaitForNewWindow();