UiController

public interface UiController

Known direct subclasses
IdlingUiController

Similar to UiController but with one additional method that enables getting an instance of IdlingResourceRegistry.

InterruptableUiController

Similar to UiController but with one additional method that enables interrupting Espresso tasks.


Provides base-level UI operations (such as injection of MotionEvents) that can be used to build user actions such as clicks, scrolls, swipes, etc. This replaces parts of the android Instrumentation class that provides similar functionality. However, it provides a more advanced synchronization mechanism for test actions. The key differentiators are:

  • test actions are assumed to be called on the main thread
  • after a test action is initiated, execution blocks until all messages in the main message queue have been cleared.

Summary

Public methods

abstract boolean
injectKeyEvent(KeyEvent event)

Injects a key event into the application.

abstract boolean
injectMotionEvent(MotionEvent event)

Injects a motion event into the application.

default boolean
injectMotionEventSequence(Iterable<MotionEvent> events)
abstract boolean

Types a string into the application using series of KeyEvents.

abstract void
loopMainThreadForAtLeast(long millisDelay)

Loops the main thread for a specified period of time.

abstract void

Loops the main thread until the application goes idle.

Public methods

injectKeyEvent

abstract boolean injectKeyEvent(KeyEvent event)

Injects a key event into the application.

Parameters
KeyEvent event

the (non-null!) event to inject

Returns
boolean

true if the event was injected, false otherwise

Throws
androidx.test.espresso.InjectEventSecurityException androidx.test.espresso.InjectEventSecurityException

if the event couldn't be injected because it would interact with another application.

injectMotionEvent

abstract boolean injectMotionEvent(MotionEvent event)

Injects a motion event into the application.

Parameters
MotionEvent event

the (non-null!) event to inject

Returns
boolean

true if the event was injected, false otherwise

Throws
androidx.test.espresso.InjectEventSecurityException androidx.test.espresso.InjectEventSecurityException

if the event couldn't be injected because it would interact with another application. @Deprecated Please use injectMotionEventSequence this method will be removed in future.

injectMotionEventSequence

default boolean injectMotionEventSequence(Iterable<MotionEvent> events)
Throws
androidx.test.espresso.InjectEventSecurityException androidx.test.espresso.InjectEventSecurityException

injectString

abstract boolean injectString(String str)

Types a string into the application using series of KeyEvents. It is up to the implementor to decide how to map the string to KeyEvent objects. If you need specific control over the key events generated use injectKeyEvent.

Parameters
String str

the (non-null!) string to type

Returns
boolean

true if the string was injected, false otherwise

Throws
androidx.test.espresso.InjectEventSecurityException androidx.test.espresso.InjectEventSecurityException

if the events couldn't be injected because it would interact with another application.

loopMainThreadForAtLeast

abstract void loopMainThreadForAtLeast(long millisDelay)

Loops the main thread for a specified period of time.

Control may not return immediately, instead it'll return after the provided delay has passed and the queue is in an idle state again.

Parameters
long millisDelay

time to spend in looping the main thread

loopMainThreadUntilIdle

abstract void loopMainThreadUntilIdle()

Loops the main thread until the application goes idle.

An empty task is immediately inserted into the task queue to ensure that if we're idle at this moment we'll return instantly.