【问题标题】:Espresso, clicking on a item at position浓缩咖啡,点击位置的项目
【发布时间】:2018-08-29 19:24:47
【问题描述】:

我正在尝试单击网格视图中特定位置的项目。

onData(instanceOf(MyClass.class))
            .inAdapterView(withId(R.id.my_view))
            .atPosition(R.integer.my_id)
            .perform(click());

但我收到了这个java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

我正在使用 MockWebServer 对响应进行排队,即使 UI 在屏幕上显示所有列表项后,我也会收到此错误,我不知道为什么。

另外,我想获取特定项目的内容。

【问题讨论】:

  • 你能提供完整的堆栈跟踪吗?

标签: android gridview android-espresso


【解决方案1】:

嗯,我认为这是因为您匹配的类只有一个,而不是具有值的特定适配器。

请考虑这篇文章:

作为参数传递给onData() 的匹配器必须与以下值匹配 由Adapter.getItem() 返回。所以第一个版本不匹配, 因为使用了错误的类型。应该是:

onData(is(instanceOf(IconRowAdapter.IconRow.class)))

在不同类型的 字符序列。 String 是一个 CharSequence,但如果 IconRow.getText() 返回 CharSequence 而不是 String,那么这也可以是 Spannable、Editable 等在这种情况下 equalTo 不匹配。因此,如果 IconRow.getText() 返回除字符串以外的任何内容,请确保将其转换 在比较之前转换成一个字符串。

此帖取自How to use Espresso to test item in adapter at a specific position

你的问题缺少测试类的代码,所以我不能直接给你答案。我只能推荐阅读上面的 StackOverflow 链接。

希望对你有帮助

【讨论】:

  • 嘿,我也试过了,但是我得到的错误是不同的,无论我使用“onData”做什么,我都会得到 indexOutOfBoundsException
  • 您是否注意到您使用的是模拟类,但作为参数的 Espresso 具有正常参数 ;-),所以您的适配器可能是空的
  • 模拟类? onData(is(instanceOf(MyClass.class))) .inAdapterView(withId(R.id.my_view)) .atPosition(R.integer.my_id) .perform(click()); 这是我尝试过的,我仍然遇到同样的错误。
【解决方案2】:

您可能需要更深入地“钻取”视图层次结构才能找到单元格中的项目。使用网格单元中项目的 id 在“.perform”之前添加一个额外的方法调用

 onChildView(withId(R.id.???)).perform(click());

使用用户将点击的视图的 ID。

【讨论】:

  • 嘿,问题是,我没有覆盖适配器中的 getItem 调用
猜你喜欢
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多