【问题标题】:Espresso Matcher multiple child custom viewsEspresso Matcher 多个子自定义视图
【发布时间】:2019-10-21 02:48:16
【问题描述】:

我希望有些人可以帮助我摆脱一些轻量级的自定义视图。我运行了 Record Espresso 测试,android-studio 生成了以下代码。

    ViewInteraction textInputEditText = onView(
            allOf(withId(R.id.edit_text_last_name),
                    childAtPosition(
                            allOf(withId(R.id.layout_item_viewpager),
                                    childAtPosition(
                                            withId(R.id.layout_my_activity),
                                            0)),
                            1),
                    isDisplayed()));
    textInputEditText.perform(replaceText("a"), closeSoftKeyboard());
}

private static Matcher<View> childAtPosition(
        final Matcher<View> parentMatcher, final int position) {

    return new TypeSafeMatcher<View>() {
        @Override
        public void describeTo(Description description) {
            description.appendText("Child at position " + position + " in parent ");
            parentMatcher.describeTo(description);
        }

        @Override
        public boolean matchesSafely(View view) {
            ViewParent parent = view.getParent();
            return parent instanceof ViewGroup && parentMatcher.matches(parent)
                    && view.equals(((ViewGroup) parent).getChildAt(position));
        }
    };
}

Record Espresso Test 生成的代码有效,我不确定子视图如何工作或 0 和 1 在此代码块中的作用。

我已经阅读了大量有关 Hamcrest 匹配器以及如何创建自定义匹配器的信息,但我很难找到与 android 生成的代码相关的材料。这里的任何帮助将不胜感激。

【问题讨论】:

    标签: java android android-espresso matcher


    【解决方案1】:

    01 是给定 ID 的多个返回匹配项的索引。让我们从内到外处理您的代码。

    1. 使用您的 ID layout_my_activity 查找活动。
    2. 索引为0childAtPosition 表示使用其返回的第一个匹配项(索引从0 开始)。这可能不是必需的,因为不太可能(不可能?)您有多个使用相同 ID 运行的活动,但测试记录器喜欢尽可能明确。
    3. 在其中查找与 layout_item_viewpager 匹配的 ID。
    4. 索引为1childAtPosition 表示使用第二个。
    5. 在第二个视图寻呼机中,找到 ID 为 edit_text_last_name 的内容,这是您要在其中放置 a 的字段。

    【讨论】:

    • 我必须再检查一次,但我很确定当我运行 espresso 测试时,我从 EditTextOne 得到 1,从 EditText2 得到 2,都在同一个 ViewPager 中。
    • 具有讽刺意味的是,我目前正在处理与此类似的代码。它昨天工作得很好,但今天不行。呃。
    • 我的代码今天又可以工作了:P 喜欢这些东西。不要再希望我坚持使用 Appium。不,没有机会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多