Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Espresso How do I perform touch events

How can I test a view with simple touch events such as ACTION_DOWN and ACTION_MOVE?

like image 306
RCB Avatar asked Oct 27 '25 12:10

RCB


1 Answers

You can easily send touch events. Use this view action:

public static ViewAction touchDownAndUp(final float x, final float y) {
    return new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return isDisplayed();
        }

        @Override
        public String getDescription() {
            return "Send touch events.";
        }

        @Override
        public void perform(UiController uiController, final View view) {
            // Get view absolute position
            int[] location = new int[2];
            view.getLocationOnScreen(location);

            // Offset coordinates by view position
            float[] coordinates = new float[] { x + location[0], y + location[1] };
            float[] precision = new float[] { 1f, 1f };

            // Send down event, pause, and send up
            MotionEvent down = MotionEvents.sendDown(uiController, coordinates, precision).down;
            uiController.loopMainThreadForAtLeast(200);
            MotionEvents.sendUp(uiController, down, coordinates);
        }
    };
}

And invoke it with:

onView(withId(R.id.my_view)).perform(touchDownAndUp(x, y));
like image 154
Greg Ennis Avatar answered Oct 29 '25 01:10

Greg Ennis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!