Click by bounds / coordinates

前端 未结 3 654
清酒与你
清酒与你 2020-12-06 04:11

I know it is possible for Espresso to click by bounds the way UiAutomator does. (x and y coordinates) I have read through the documentation but I can\'t seem to find it. Any

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-06 05:01

    Espresso has the GeneralClickAction, this is the underlying implementation of ViewActions click(), doubleClick(), and longClick().

    The GeneralClickAction's constructor takes a CoordinatesProvider as second argument. So the basic idea is to create a static ViewAction getter which provides a custom CoordinatesProvider. Something like this:

    public static ViewAction clickXY(final int x, final int y){
        return new GeneralClickAction(
            Tap.SINGLE,
            new CoordinatesProvider() {
                @Override
                public float[] calculateCoordinates(View view) {
    
                   final int[] screenPos = new int[2];
                   view.getLocationOnScreen(screenPos);
    
                   final float screenX = screenPos[0] + x;
                   final float screenY = screenPos[1] + y;
                   float[] coordinates = {screenX, screenY};
    
                   return coordinates;
                }
            },
            Press.FINGER);
    }
    

    A general advice with Espresso: instead of looking for documentation (there's virtually none), look at the source code. Espresso is open source and the source code itself is of really good quality.

提交回复
热议问题