如何使用TabLayout设置ViewPager的当前选项卡

16

我有一个自定义的viewpager(由于某些原因禁用了滑动),并与一个tablayout一起工作。内容根据选定的选项卡而改变。我想使用espresso进行测试: 1)单击特定选项卡 2)在选项卡的特定页面中检查某些数据 我该怎么做。我是espresso的新手

2个回答

23

有几种方法可以做到这一点,其中一个简单的方法是通过选定标签标题选择元素,我使用以下代码:

Matcher<View> matcher = allOf(withText("TAB TITLE"),
            isDescendantOfA(withId(R.id.customTab)));
onView(matcher).perform(click());
SystemClock.sleep(800); // Wait a little until the content is loaded

你只需要将匹配器适应你的布局,然后检查内容。

例如:

onView(withId(R.id.someId)).check(matches(isCompletelyDisplayed()));
或者:
onView(withText(R.string.someText)).check(matches(isCompletelyDisplayed()));

你可以在指定视图匹配器部分的这里找到示例。

如果你正在使用RecyclerView显示选项卡中的内容,请看一下这个:Espresso RecyclerView inside ViewPager


如果选项卡只有图标而没有文本,该如何捕获它?Espresso中不存在withIcon()。还有其他替代方法吗? - Red M
在这种情况下,您仍然可以使用 withIdwithTagValue 或创建自定义匹配器,而不是 withText - jeprubio
从我的实际代码中,我在tabLayout.getTabAt(i).setTag(...)中传递了一个setTag(),但withTagValue()需要一个Matcher<Object>作为参数而不是一个字符串。关于withId(),tabLayout.getTabAt(i)没有任何设置setId()的方法。我只能设置整个布局的ID而不是单个选项卡的ID。 - Red M
1
您可以这样使用 withTagValueonView(withTagValue(is((Object) tagValueString))),使用 Matcher.is 方法来查找具有该标记的视图。 - jeprubio
我实现了你的建议,但我的测试失败了。我打开了以下问题 https://dev59.com/XKzka4cB1Zd3GeqP8WwI - Red M

-3

当您清楚知道 UI 中期望的内容并且可以验证相同内容时,应使用 Espresso。

在您的情况下,要转到任何选项卡,可以使用视图操作来点击该选项卡。 要验证数据,首先应了解该选项卡上期望存在哪些数据,然后只需使用匹配器来检查它们是否已显示。


1
这并没有解释如何在ViewPager中选择特定的选项卡。 - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接