How to set current tab in viewpager with tablayout

2019-04-04 04:00发布

I have a custom viewpager (with swiping disabled for reasons) working with a tablayout. The content changes based on which tab is selected. I want to test this using espresso: 1) Click on a particular tab 2) Check some data in a particular page of the tab How can I do that. I am a novice to espresso

2条回答
不美不萌又怎样
2楼-- · 2019-04-04 04:44

Espresso should be used when you clearly know what is expected in the UI and so you can verify the same.

In your case, to go to any tab, you can use view action to tap on that tab. To verify the data, first you should know what data is expected to be there on that tab and then just use matchers to check if they are displayed or not.

查看更多
放我归山
3楼-- · 2019-04-04 04:51

There are several ways of doing this, an easy one is to select the element by the tab title, I use this code:

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

You only have to adapt the matcher to your layout. Then, check the content.

For example:

onView(withId(R.id.someId)).check(matches(isCompletelyDisplayed()));

or:

onView(withText(R.string.someText)).check(matches(isCompletelyDisplayed()));

You can find examples here in the Specifying a View Matcher section: http://developer.android.com/intl/es/training/testing/ui-testing/espresso-testing.html

If you are using a RecyclerView to show the content of the tabs have a look at this: Espresso RecyclerView inside ViewPager

查看更多
登录 后发表回答