Search in sources :

Example 1 with UiWatcher

use of androidx.test.uiautomator.UiWatcher in project fdroidclient by f-droid.

the class UiWatchers method registerAnrAndCrashWatchers.

/**
 * We can use the UiDevice registerWatcher to register a small script to be executed when the
 * framework is waiting for a control to appear. Waiting may be the cause of an unexpected
 * dialog on the screen and it is the time when the framework runs the registered watchers.
 * This is a sample watcher looking for ANR and crashes. it closes it and moves on. You should
 * create your own watchers and handle error logging properly for your type of tests.
 */
public void registerAnrAndCrashWatchers() {
    UiDevice.getInstance().registerWatcher("ANR", new UiWatcher() {

        @Override
        public boolean checkForCondition() {
            UiObject window = new UiObject(new UiSelector().className("com.android.server.am.AppNotRespondingDialog"));
            String errorText = null;
            if (window.exists()) {
                try {
                    errorText = window.getText();
                } catch (UiObjectNotFoundException e) {
                    Log.e(LOG_TAG, "dialog gone?", e);
                }
                onAnrDetected(errorText);
                postHandler("Wait");
                // triggered
                return true;
            }
            // no trigger
            return false;
        }
    });
    // class names may have changed
    UiDevice.getInstance().registerWatcher("ANR2", new UiWatcher() {

        @Override
        public boolean checkForCondition() {
            UiObject window = new UiObject(new UiSelector().packageName("android").textContains("isn't responding."));
            if (window.exists()) {
                String errorText = null;
                try {
                    errorText = window.getText();
                } catch (UiObjectNotFoundException e) {
                    Log.e(LOG_TAG, "dialog gone?", e);
                }
                onAnrDetected(errorText);
                postHandler("Wait");
                // triggered
                return true;
            }
            // no trigger
            return false;
        }
    });
    UiDevice.getInstance().registerWatcher("CRASH", new UiWatcher() {

        @Override
        public boolean checkForCondition() {
            UiObject window = new UiObject(new UiSelector().className("com.android.server.am.AppErrorDialog"));
            if (window.exists()) {
                String errorText = null;
                try {
                    errorText = window.getText();
                } catch (UiObjectNotFoundException e) {
                    Log.e(LOG_TAG, "dialog gone?", e);
                }
                onCrashDetected(errorText);
                postHandler("OK");
                // triggered
                return true;
            }
            // no trigger
            return false;
        }
    });
    UiDevice.getInstance().registerWatcher("CRASH2", new UiWatcher() {

        @Override
        public boolean checkForCondition() {
            UiObject window = new UiObject(new UiSelector().packageName("android").textContains("has stopped"));
            if (window.exists()) {
                String errorText = null;
                try {
                    errorText = window.getText();
                } catch (UiObjectNotFoundException e) {
                    Log.e(LOG_TAG, "dialog gone?", e);
                }
                onCrashDetected(errorText);
                postHandler("OK");
                // triggered
                return true;
            }
            // no trigger
            return false;
        }
    });
    Log.i(LOG_TAG, "Registered GUI Exception watchers");
}
Also used : UiWatcher(androidx.test.uiautomator.UiWatcher) UiObject(androidx.test.uiautomator.UiObject) UiSelector(androidx.test.uiautomator.UiSelector) UiObjectNotFoundException(androidx.test.uiautomator.UiObjectNotFoundException)

Aggregations

UiObject (androidx.test.uiautomator.UiObject)1 UiObjectNotFoundException (androidx.test.uiautomator.UiObjectNotFoundException)1 UiSelector (androidx.test.uiautomator.UiSelector)1 UiWatcher (androidx.test.uiautomator.UiWatcher)1