在Espresso中,如何在所有匹配的视图上执行操作而不触发AmbiguousViewMatcherException?

问题描述 投票:0回答:1

我正在使用Espresso在Android应用上运行自动化的UI测试。我想对符合指定条件的all视图执行操作。 Espresso确实使用allOf()方法来查找匹配器匹配的所有视图。但是,如果有多个匹配项,则诸如onView(withText("some text")).perform(click())之类的命令将抛出AmbiguousViewMatcherException

我确实有一种方法,可以在有多个匹配项时获取第n个匹配视图。

    private static Matcher<View> getElementFromMatchAtPosition(final Matcher<View> matcher, final int position) {
        return new BaseMatcher<View>() {
            int counter = 0;

            @Override
            public boolean matches(final Object item) {
                if (matcher.matches(item)) {
                    if(counter == position) {
                        counter++;
                        return true;
                    }
                    counter++;
                }
                return false;
            }

            @Override
            public void describeTo(final Description description) {
                description.appendText("Element at hierarchy position " + position);
            }
        };
    }

当然,我可以使用此方法遍历每个视图。但是,还有更优雅的解决方案吗?

如果我不知道有多少个匹配的视图怎么办?

android android-espresso android-testing hamcrest
1个回答
0
投票

听起来您可能未正确使用allOf()

© www.soinside.com 2019 - 2024. All rights reserved.