在RecyclerView

时间:2017-07-13 00:14:28

标签: android android-espresso android-testing

我有一个带有以下布局的回收者视图:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/color_primary"/>

</RelativeLayout>

我遇到了一个问题,因为在测试期间我有一个回收者视图显示两个具有相同文本的视图的时刻,我需要检查其中一个是否可见。

匹配视图的代码如下:

onView(withId(R.id.title)).check(matches(withText("Test")));

espresso失败了,因为它找到了多个符合匹配条件的视图。

如何匹配我需要的特定视图?

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是在每行中设置不同的标签,并使用此标签与espresso匹配。

让我们说正在显示的数据会保留在数据库中。您可以使用模型ID作为标记,使用此标记,您将在recycleler视图中使用可在匹配器中使用的唯一约束。

代码将是这样的:

onView(allOf(
            withId(R.id.title),
            allOf(
                isDescendantOfA(withTagValue(is((Object)model.getId())))),
                withText(model.getTitle())))
       .check(matches(isDisplayed()))

由于您需要使用匹配器中的文本,因此可以检查视图是否可见,以便为测试添加子句。

您可以在此处阅读解释此内容的文章:https://medium.com/tech-track/validating-views-by-tag-with-espresso-50d3f47b14a7