gpt4 book ai didi

android - 在 Espresso 中,当多个 View 匹配时如何避免 AmbiguousViewMatcherException

转载 作者:IT王子 更新时间:2023-10-29 00:00:26 26 4
gpt4 key购买 nike

拥有包含一些图像的 gridView。 gridView 的单元格来自相同的预定义布局,具有相同的 id 和 desc。

R.id.item_image == 2131493330

onView(withId(is(R.id.item_image))).perform(click());

由于网格中的所有单元格都具有相同的 id,因此它得到了 AmbiguousViewMatcherException。如何只拿起第一个或其中任何一个?谢谢!

android.support.test.espresso.AmbiguousViewMatcherException: 'with id: is <2131493330>' matches multiple views in the hierarchy. Problem views are marked with '****MATCHES****' below.

+------------->ImageView{id=2131493330, res-name=item_image, desc=Image, visibility=VISIBLE, width=262, height=262, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0} ****MATCHES****

+------------->ImageView{id=2131493330, res-name=item_image, desc=Image, visibility=VISIBLE, width=262, height=262, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0} ****MATCHES**** |

最佳答案

编辑:有人在评论中提到 withParentIndex现已推出,请先尝试一下,然后再使用下面的自定义解决方案。

我很惊讶我无法通过简单地提供索引和匹配器(即 withText、withId)来找到解决方案。接受的答案仅在您处理 onData 和 ListViews 时解决问题。

如果屏幕上有多个 View 具有相同的 resId/text/contentDesc,则可以使用此自定义匹配器选择所需的 View ,而不会导致 AmbiguousViewMatcherException:

public static Matcher<View> withIndex(final Matcher<View> matcher, final int index) {
return new TypeSafeMatcher<View>() {
int currentIndex = 0;

@Override
public void describeTo(Description description) {
description.appendText("with index: ");
description.appendValue(index);
matcher.describeTo(description);
}

@Override
public boolean matchesSafely(View view) {
return matcher.matches(view) && currentIndex++ == index;
}
};
}

例如:

onView(withIndex(withId(R.id.my_view), 2)).perform(click());

将对 R.id.my_view 的第三个实例执行点击操作。

关于android - 在 Espresso 中,当多个 View 匹配时如何避免 AmbiguousViewMatcherException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29378552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com