Как да симулирам докосване извън прозореца AlertDialog на android с еспресо

Моите зависимости:

androidTestCompile 'com.android.support.test:runner:0.3' 
androidTestCompile 'com.android.support.test:rules:0.3' 
androidTestCompile 'com.android.support:support-annotations:23.0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' 
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2') { 
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7' 
} 
androidTestCompile 'junit:junit:4.12'

Не мога да намеря начин да симулирам щракване извън прозорец AlertDialog, за да проверя нещо, когато се затвори...

Как мога да го направя?


person Daniel Gomez Rico    schedule 16.09.2015    source източник
comment
Как реши този проблем?   -  person Rakesh    schedule 24.02.2016
comment
@Rakesh не е решен :(   -  person Daniel Gomez Rico    schedule 24.02.2016


Отговори (2)


Вижте отговора ми.

Еспресото не може да направи това.

Трябва да използвате uiautomator във вашия Espresso тест, добавете това към gradle на вашия проект:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'

След като се появи вашият диалогов прозорец, можете да щракнете върху екрана на всяка координата:

UiDevice device = UiDevice.getInstance(getInstrumentation());
        device.click(x,y);

Това ще затвори вашия диалог

person Rubén López García    schedule 25.04.2018

Можете да направите това в много случаи, като създадете персонализирано ClickAction:

    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);
}   

След това можете да намерите известен изглед в диалоговия прозорец (кажете бутона „OK“) и да го извикате, както следва:

onView(withText("OK")).perform(clickXY(-200, 200));

Очевидно стойностите x/y, които използвате, ще зависят от вашата конкретна ситуация.

person jdonmoyer    schedule 02.05.2016