Android Espresso坚持认为按钮不可见

时间:2018-09-04 15:07:25

标签: android android-espresso

我试图在与Espresso的对话框中单击一个按钮。在较高的屏幕上,将显示该按钮,并且很好。在较小的屏幕上,即使我向上滑动并显示按钮,单击也会失败:

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 :(得分:0)

如果该按钮位于ScrollView中,则尝试使用ViewActions.scrollTo()执行该操作:

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

答案 1 :(得分:0)

我认为最好定义一个单击动作,该动作将在必要时处理滚动,因此您不必每次都进行不必要的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())
            }
        }