Android Espresso настаивает, что кнопка не видна - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь нажать на кнопку в диалоге с эспрессо. На высоком экране отображается кнопка, и это нормально. На меньшем экране, даже если я проведу пальцем вверх и появится кнопка, щелчок не удастся:

Action will not be performed because the target view does not match one or more of the following constraints:
at least 90 percent of the view's area is displayed to the user.

Вот соответствующий код:

swipeUp(R.id.scroll);
onView(withText("OK"))
                .inRoot(isDialog())
                .check(matches(isDisplayed()))
                .perform(click());

Я поставил точку останова после удара и сделал снимок экрана:

enter image description here

Как видите, кнопка полностью видна. Я пытался сопоставить кнопку различными способами:

onView(withText("Ok")
onView(withText("ok")
onView(withText("OK"))
                .inRoot(isDialog())
                .check(matches(isDisplayed()));

Вот что написал тестовый регистратор:

onView(
                allOf(withId(android.R.id.button1), withText("OK"),
                        childAtPosition(
                                childAtPosition(
                                        withClassName(is("android.widget.ScrollView")),
                                        0),
                                3)));

Я также пытался просто использовать pressBack (), но это не закрывает диалог.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я думаю, что лучше определить действие щелчка, которое будет обрабатывать прокрутку при необходимости, поэтому вам не придется каждый раз выполнять ненужное действие scrollTo.

 fun clickViewWithText(text: String) {
            try {
                onView(withText(text)).perform(click())
            } catch (e: Exception) {
                onView(withText(text)).perform(scrollTo(), click())
            }
        }

Вы также можете обобщить это и написать

fun clickView(matcher: Matcher<View>) {
            try {
                onView(matcher).perform(click())
            } catch (e: Exception) {
                onView(matcher).perform(scrollTo(), click())
            }
        }
0 голосов
/ 16 октября 2018

Если кнопка в ScrollView, попробуйте выполнить с ViewActions.scrollTo () :

onView(withText("OK"))
    .inRoot(isDialog())
    .perform(scrollTo(), click());
...