Most visited

Recently visited

Added in API level 18

UiAutomation

public final class UiAutomation
extends Object

java.lang.Object
   ↳ android.app.UiAutomation


Class for interacting with the device's UI by simulation user actions and introspection of the screen content. It relies on the platform accessibility APIs to introspect the screen and to perform some actions on the remote view tree. It also allows injecting of arbitrary raw input events simulating user interaction with keyboards and touch devices. One can think of a UiAutomation as a special type of AccessibilityService which does not provide hooks for the service life cycle and exposes other APIs that are useful for UI test automation.

The APIs exposed by this class are low-level to maximize flexibility when developing UI test automation tools and libraries. Generally, a UiAutomation client should be using a higher-level library or implement high-level functions. For example, performing a tap on the screen requires construction and injecting of a touch down and up events which have to be delivered to the system by a call to injectInputEvent(InputEvent, boolean).

The APIs exposed by this class operate across applications enabling a client to write tests that cover use cases spanning over multiple applications. For example, going to the settings application to change a setting and then interacting with another application whose behavior depends on that setting.

Summary

Nested classes

interface UiAutomation.AccessibilityEventFilter

Listener for filtering accessibility events. 

interface UiAutomation.OnAccessibilityEventListener

Listener for observing the AccessibilityEvent stream. 

Constants

int FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES

UiAutomation supresses accessibility services by default.

int ROTATION_FREEZE_0

Rotation constant: Freeze rotation to 0 degrees (natural orientation)

int ROTATION_FREEZE_180

Rotation constant: Freeze rotation to 180 degrees .

int ROTATION_FREEZE_270

Rotation constant: Freeze rotation to 270 degrees .

int ROTATION_FREEZE_90

Rotation constant: Freeze rotation to 90 degrees .

int ROTATION_FREEZE_CURRENT

Rotation constant: Freeze rotation to its current state.

int ROTATION_UNFREEZE

Rotation constant: Unfreeze rotation (rotating the device changes its rotation state).

Public methods

void clearWindowAnimationFrameStats()

Clears the window animation rendering statistics.

boolean clearWindowContentFrameStats(int windowId)

Clears the frame statistics for the content of a given window.

AccessibilityEvent executeAndWaitForEvent(Runnable command, UiAutomation.AccessibilityEventFilter filter, long timeoutMillis)

Executes a command and waits for a specific accessibility event up to a given wait timeout.

ParcelFileDescriptor executeShellCommand(String command)

Executes a shell command.

AccessibilityNodeInfo findFocus(int focus)

Find the view that has the specified focus type.

AccessibilityNodeInfo getRootInActiveWindow()

Gets the root AccessibilityNodeInfo in the active window.

final AccessibilityServiceInfo getServiceInfo()

Gets the an AccessibilityServiceInfo describing this UiAutomation.

WindowAnimationFrameStats getWindowAnimationFrameStats()

Gets the window animation frame statistics.

WindowContentFrameStats getWindowContentFrameStats(int windowId)

Gets the frame statistics for a given window.

List<AccessibilityWindowInfo> getWindows()

Gets the windows on the screen.

boolean injectInputEvent(InputEvent event, boolean sync)

A method for injecting an arbitrary input event.

final boolean performGlobalAction(int action)

Performs a global action.

void setOnAccessibilityEventListener(UiAutomation.OnAccessibilityEventListener listener)

Sets a callback for observing the stream of AccessibilityEvents.

boolean setRotation(int rotation)

Sets the device rotation.

void setRunAsMonkey(boolean enable)

Sets whether this UiAutomation to run in a "monkey" mode.

final void setServiceInfo(AccessibilityServiceInfo info)

Sets the AccessibilityServiceInfo that describes how this UiAutomation will be handled by the platform accessibility layer.

Bitmap takeScreenshot()

Takes a screenshot.

void waitForIdle(long idleTimeoutMillis, long globalTimeoutMillis)

Waits for the accessibility event stream to become idle, which is not to have received an accessibility event within idleTimeoutMillis.

Inherited methods

From class java.lang.Object

Constants

FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES

Added in API level 24
int FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES

UiAutomation supresses accessibility services by default. This flag specifies that existing accessibility services should continue to run, and that new ones may start. This flag is set when obtaining the UiAutomation from getUiAutomation(int).

Constant Value: 1 (0x00000001)

ROTATION_FREEZE_0

Added in API level 18
int ROTATION_FREEZE_0

Rotation constant: Freeze rotation to 0 degrees (natural orientation)

Constant Value: 0 (0x00000000)

ROTATION_FREEZE_180

Added in API level 18
int ROTATION_FREEZE_180

Rotation constant: Freeze rotation to 180 degrees .

Constant Value: 2 (0x00000002)

ROTATION_FREEZE_270

Added in API level 18
int ROTATION_FREEZE_270

Rotation constant: Freeze rotation to 270 degrees .

Constant Value: 3 (0x00000003)

ROTATION_FREEZE_90

Added in API level 18
int ROTATION_FREEZE_90

Rotation constant: Freeze rotation to 90 degrees .

Constant Value: 1 (0x00000001)

ROTATION_FREEZE_CURRENT

Added in API level 18
int ROTATION_FREEZE_CURRENT

Rotation constant: Freeze rotation to its current state.

Constant Value: -1 (0xffffffff)

ROTATION_UNFREEZE

Added in API level 18
int ROTATION_UNFREEZE

Rotation constant: Unfreeze rotation (rotating the device changes its rotation state).

Constant Value: -2 (0xfffffffe)

Public methods

clearWindowAnimationFrameStats

Added in API level 21
void clearWindowAnimationFrameStats ()

Clears the window animation rendering statistics. These statistics contain information about the most recently rendered window animation frames, i.e. for window transition animations.

See also:

clearWindowContentFrameStats

Added in API level 21
boolean clearWindowContentFrameStats (int windowId)

Clears the frame statistics for the content of a given window. These statistics contain information about the most recently rendered content frames.

Parameters
windowId int: The window id.
Returns
boolean Whether the window is present and its frame statistics were cleared.

See also:

executeAndWaitForEvent

Added in API level 18
AccessibilityEvent executeAndWaitForEvent (Runnable command, 
                UiAutomation.AccessibilityEventFilter filter, 
                long timeoutMillis)

Executes a command and waits for a specific accessibility event up to a given wait timeout. To detect a sequence of events one can implement a filter that keeps track of seen events of the expected sequence and returns true after the last event of that sequence is received.

Note: It is caller's responsibility to recycle the returned event.

Parameters
command Runnable: The command to execute.
filter UiAutomation.AccessibilityEventFilter: Filter that recognizes the expected event.
timeoutMillis long: The wait timeout in milliseconds.
Returns
AccessibilityEvent
Throws
TimeoutException If the expected event is not received within the timeout.

executeShellCommand

Added in API level 21
ParcelFileDescriptor executeShellCommand (String command)

Executes a shell command. This method returs a file descriptor that points to the standard output stream. The command execution is similar to running "adb shell " from a host connected to the device.

Note: It is your responsibility to close the retunred file descriptor once you are done reading.

Parameters
command String: The command to execute.
Returns
ParcelFileDescriptor A file descriptor to the standard output stream.

findFocus

Added in API level 21
AccessibilityNodeInfo findFocus (int focus)

Find the view that has the specified focus type. The search is performed across all windows.

Note: In order to access the windows you have to opt-in to retrieve the interactive windows by setting the FLAG_RETRIEVE_INTERACTIVE_WINDOWS flag. Otherwise, the search will be performed only in the active window.

Parameters
focus int: The focus to find. One of FOCUS_INPUT or FOCUS_ACCESSIBILITY.
Returns
AccessibilityNodeInfo The node info of the focused view or null.

See also:

getRootInActiveWindow

Added in API level 18
AccessibilityNodeInfo getRootInActiveWindow ()

Gets the root AccessibilityNodeInfo in the active window.

Returns
AccessibilityNodeInfo The root info.

getServiceInfo

Added in API level 18
AccessibilityServiceInfo getServiceInfo ()

Gets the an AccessibilityServiceInfo describing this UiAutomation. This method is useful if one wants to change some of the dynamically configurable properties at runtime.

Returns
AccessibilityServiceInfo The accessibility service info.

See also:

getWindowAnimationFrameStats

Added in API level 21
WindowAnimationFrameStats getWindowAnimationFrameStats ()

Gets the window animation frame statistics. These statistics contain information about the most recently rendered window animation frames, i.e. for window transition animations.

A typical usage requires clearing the window animation frame statistics via clearWindowAnimationFrameStats() followed by an interaction that causes a window transition which uses a window animation and finally getting the window animation frame statistics by calling this method.

 // Start with a clean slate.
 uiAutimation.clearWindowAnimationFrameStats();

 // Do stuff to trigger a window transition.

 // Get the frame statistics.
 WindowAnimationFrameStats stats = uiAutomation.getWindowAnimationFrameStats();
 

Returns
WindowAnimationFrameStats The window animation frame statistics.

See also:

getWindowContentFrameStats

Added in API level 21
WindowContentFrameStats getWindowContentFrameStats (int windowId)

Gets the frame statistics for a given window. These statistics contain information about the most recently rendered content frames.

A typical usage requires clearing the window frame statistics via clearWindowContentFrameStats(int) followed by an interaction with the UI and finally getting the window frame statistics via calling this method.

 // Assume we have at least one window.
 final int windowId = getWindows().get(0).getId();

 // Start with a clean slate.
 uiAutimation.clearWindowContentFrameStats(windowId);

 // Do stuff with the UI.

 // Get the frame statistics.
 WindowContentFrameStats stats = uiAutomation.getWindowContentFrameStats(windowId);
 

Parameters
windowId int: The window id.
Returns
WindowContentFrameStats The window frame statistics, or null if the window is not present.

See also:

getWindows

Added in API level 21
List<AccessibilityWindowInfo> getWindows ()

Gets the windows on the screen. This method returns only the windows that a sighted user can interact with, as opposed to all windows. For example, if there is a modal dialog shown and the user cannot touch anything behind it, then only the modal window will be reported (assuming it is the top one). For convenience the returned windows are ordered in a descending layer order, which is the windows that are higher in the Z-order are reported first.

Note: In order to access the windows you have to opt-in to retrieve the interactive windows by setting the FLAG_RETRIEVE_INTERACTIVE_WINDOWS flag.

Returns
List<AccessibilityWindowInfo> The windows if there are windows such, otherwise an empty list.

injectInputEvent

Added in API level 18
boolean injectInputEvent (InputEvent event, 
                boolean sync)

A method for injecting an arbitrary input event.

Note: It is caller's responsibility to recycle the event.

Parameters
event InputEvent: The event to inject.
sync boolean: Whether to inject the event synchronously.
Returns
boolean Whether event injection succeeded.

performGlobalAction

Added in API level 18
boolean performGlobalAction (int action)

Performs a global action. Such an action can be performed at any moment regardless of the current application or user location in that application. For example going back, going home, opening recents, etc.

Parameters
action int: The action to perform.
Returns
boolean Whether the action was successfully performed.

See also:

setOnAccessibilityEventListener

Added in API level 18
void setOnAccessibilityEventListener (UiAutomation.OnAccessibilityEventListener listener)

Sets a callback for observing the stream of AccessibilityEvents.

Parameters
listener UiAutomation.OnAccessibilityEventListener: The callback.

setRotation

Added in API level 18
boolean setRotation (int rotation)

Sets the device rotation. A client can freeze the rotation in desired state or freeze the rotation to its current state or unfreeze the rotation (rotating the device changes its rotation state).

Parameters
rotation int: The desired rotation.
Returns
boolean Whether the rotation was set successfully.

See also:

setRunAsMonkey

Added in API level 18
void setRunAsMonkey (boolean enable)

Sets whether this UiAutomation to run in a "monkey" mode. Applications can query whether they are executed in a "monkey" mode, i.e. run by a test framework, and avoid doing potentially undesirable actions such as calling 911 or posting on public forums etc.

Parameters
enable boolean: whether to run in a "monkey" mode or not. Default is not.

See also:

setServiceInfo

Added in API level 18
void setServiceInfo (AccessibilityServiceInfo info)

Sets the AccessibilityServiceInfo that describes how this UiAutomation will be handled by the platform accessibility layer.

Parameters
info AccessibilityServiceInfo: The info.

See also:

takeScreenshot

Added in API level 18
Bitmap takeScreenshot ()

Takes a screenshot.

Returns
Bitmap The screenshot bitmap on success, null otherwise.

waitForIdle

Added in API level 18
void waitForIdle (long idleTimeoutMillis, 
                long globalTimeoutMillis)

Waits for the accessibility event stream to become idle, which is not to have received an accessibility event within idleTimeoutMillis. The total time spent to wait for an idle accessibility event stream is bounded by the globalTimeoutMillis.

Parameters
idleTimeoutMillis long: The timeout in milliseconds between two events to consider the device idle.
globalTimeoutMillis long: The maximal global timeout in milliseconds in which to wait for an idle state.
Throws
TimeoutException If no idle state was detected within globalTimeoutMillis.

Hooray!