gpt4 book ai didi

android - Espresso onData 执行点击多个项目

转载 作者:行者123 更新时间:2023-11-29 14:24:23 25 4
gpt4 key购买 nike

我有一个 Gridview,其适配器基于我的 MineSweeper 游戏的 Tile 类型的 pojo 列表,我正在做一些单元测试,我想做的就是单击所有没有地雷的 gridview 项目,然后长按所有有地雷的项目确实有元素

我试过以下方法:

onData(allOf(is(instanceOf(Tile.class)),isMineMatcher(true)))
.inAdapterView(withId(R.id.f_minefield_gridview))
.perform(longClick());

onData(allOf(is(instanceOf(Tile.class)),isMineMatcher(false)))
.inAdapterView(withId(R.id.f_minefield_gridview))
.perform(click());

使用我的自定义匹配器:

public static Matcher<Tile> isMineMatcher(final boolean flag){
return new TypeSafeMatcher<Tile>() {
@Override
public boolean matchesSafely(Tile tile) {
return tile.isMine() == flag;
}

@Override
public void describeTo(Description description) {
description.appendText("expected "+ flag);
}
};
}

但这会出现以下错误:

android.support.test.espresso.PerformException: Error performing 'load adapter data' on view 'with id: com.kaissersoft.minesweepergame:id/f_minefield_gridview'.
...
Caused by: java.lang.RuntimeException: Multiple data elements matched:

问题是如何使用 espresso 对多个项目执行操作?

最佳答案

你为什么不试试,因为它在 testDroid 中给出。它对我有用:

如果您的适配器中有其他对象:

public class Person {
public long id;
public String firstName;
public String lastName;
public String email;
}

您可以将它与 onData 一起使用:

onData(allOf(is(new BoundedMatcher<Object, Person>(Person.class) {
@Override
public void describeTo(Description description) {
}
@Override
protected boolean matchesSafely(Person obj) {
return obj.id = 12345L;
}
}))).inAdapterView(withId(<ADAPTER_ID>)).perform(click());

所以现在 id=12345 的 Person 将在适配器中找到(在测试执行期间)并且它将被点击。

关于android - Espresso onData 执行点击多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813336/

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