# UIAutomator Snippet Example

This example shows you how to create snippets that control the UI of a device
across system and multiple app views using UIAutomator. Unlike Espresso-based
UI automation, it does not require access to app source code.

This snippet is written as a [standalone snippet](../ex1_standalone_app/README.md)
and does not target another app. In particular, it doesn't need to target the
app under test, so it doesn't need its classpath or to be signed with the same
key.

See the [Espresso snippet tutorial](../ex2_espresso/README.md) for more
information about the app this example automates.

## Running the example code

This folder contains a fully working example of a snippet apk that uses
UIAutomator to automate a simple app.

1.  Compile the main app and automation. The main app of ex2 (espresso) is used
    as the app to automate. Unlike espresso, the uiautomator test does not
    depend on this apk and does not use its source or classpath, so you must
    compile and install the app separately.

        ./gradlew examples:ex2_espresso:assembleDebug examples:ex4_uiautomator:assembleDebug

1.  Install the apks on your phone

        adb install -r ./examples/ex2_espresso/build/outputs/apk/debug/ex2_espresso-main-debug.apk
        adb install -r ./examples/ex4_uiautomator/build/outputs/apk/debug/ex4_uiautomator-debug.apk

1.  Use `snippet_shell` from mobly to trigger `pushMainButton()`:

        snippet_shell.py com.google.android.mobly.snippet.example4

        >>> print(s.help())
        Known methods:
          pushMainButton(boolean) returns void  // Pushes the main app button, and checks the label if this is the first time.
          startMainActivity() returns void  // Opens the main activity of the app
          uiautomatorDump() returns String  // Perform a UIAutomator dump

        >>> s.startMainActivity()
        >>> s.pushMainButton(True)

1. Press ctrl+d to exit the shell and terminate the app.