我有以下观点:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/default_spacing">
<android.support.v7.widget.RecyclerView
android:id="@+id/view_monthly_resume_accounts"
android:layout_width="match_parent"
android:layout_height="100dp"/>
<!-- a lot of content -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp">
<TableRow>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/total_receipts"
android:textColor="@color/color_primary_text"/>
<TextView
android:id="@+id/view_monthly_resume_total_receipts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/value_unreceived"
android:gravity="end"/>
</TableRow>
<!-- more content -->
</TableLayout>
</LinearLayout>
</ScrollView>
此视图位于ViewPager中。我想使用id view_monthly_resume_total_receipts验证视图的内容。由于视图位于ViewPager中,因此我执行了以下操作:
onView(allOf(
withId(R.id.view_monthly_resume_balance),
isDisplayed()))
.check(matches(withText(expectedBalance)));
我有很多内容,无法保证视图正在显示,它可以在当前视图中显示在ViewPager中但在屏幕外。
我尝试将ids添加到TableLayout,LinearLayout或ScrollView并使用withParent并检查父项是否显示但未成功。
我尝试使用hasSiblings并查找我确定正在显示的R.id.view_monthly_resume_accounts,因为它是第一个视图,但也没有用。
所以,我的问题是:如何让espresso找到一个位于ViewPager内部的视图但视图在屏幕外的视图?
答案 0 :(得分:0)
经过一番研究后,我发现方法是DescendantOfA。
withParent方法仅查找最近的viewGroup。 isDescendantOfA查找所有树。
在问题的示例中,我可以将一个id添加到ScrollView附近的LinearLayout,并将匹配更新为以下内容:
onView(allOf(
withId(R.id.view_monthly_resume_balance),
allOf(
isDescendantOfA(withId(<linear layout id>)),
isDisplayed()))
.check(matches(withText(expectedBalance)));