Android - espresso - 单击基于自定义对象的 ListView 条目

标签 android hamcrest android-espresso

Espresso 用于自动测试我的应用程序。

编辑:您可以在下面找到一些答案!

如何点击(在自动 Espresso 测试脚本中)一长串自定义对象中的条目?

在 Espresso 文档中有一个 LongList 的示例。使用对象列表是我通常做的事情。到目前为止,尝试了许多从 Map 到 Object 的选项并没有产生好的结果。

Espresso 文档说应该使用“onData”。所以,像这样:

onData( myObjectHasContent("my_item: 50")).perform(click());
onView(withId( R.id.selection_pos2)).check(matches(withText("50")));

我的问题(我认为它们对学习社区有帮助): - 你能为此写一个好的匹配器吗? - 我们如何在“onData”中使用它?

什么情况?在屏幕上,我有一个对象 ListView ,例如:

public class MyOjbect { 
    public String content; 
    public int    size; 
}

我用来填充填充列表的适配器是:

public class MyObjectWithItemAndSizeAdapter extends ArrayAdapter<MyObjectWithItemAndSize> {
    private final Context context;
    private final List<MyObjectWithItemAndSize> values;
    ...
    @Override
    public View getView(int position, View concertView, ViewGroup parent) {
        View view = null;
        if (concertView != null) {
            view = (LinearLayout) concertView;
        } else {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate( R.layout.list_item, parent, false);
        } 
        TextView itemT = (TextView) view.findViewById( R.id.item_content);
        itemT.setText( values.get(position).item);
        TextView sizeT = (TextView) view.findViewById( R.id.item_size);
        sizeT.setText( "" + values.get(position).size);
        return view;
    }
 }

最佳答案

提供给 onData() 的匹配器必须匹配所需 ListViewAdapter.getItem(int) 返回的所需值。

所以在你的例子中,匹配器应该是这样的:

public static Matcher<Object> withContent(final String content) {
    return new BoundedMatcher<Object, MyObjectWithItemAndSize>(MyObjectWithItemAndSize.class) {
        @Override
        public boolean matchesSafely(MyObjectWithItemAndSize myObj) {
            return myObj.content.equals(content);
        }

        @Override
        public void describeTo(Description description) {
            description.appendText("with content '" + content + "'");
        }
    };
}

关于Android - espresso - 单击基于自定义对象的 ListView 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25358599/

相关文章:

java - Android USB 主机异步批量传输示例

android - 进度条和 Espresso

android - 如何检测 android 应用程序是否正在使用 Espresso 运行 UI 测试

java - 如何断言字符串不为空

java - 检查 Hamcrest 中的 List 是否为空

android - gradle espresso - 空测试套件

java - 带有 Cookie 的 Android MediaPlayer URL

android - 显示多个图像动画

android - Android中的按钮列表

java - 如何使用 hamcrest 比较不​​同类型