问题
I have this line of Espresso test code:
onView(withId(R.id.rvWorkDaySchedule)).perform(swipeDown());
And rvWorkDaySchedule
is shown in red in the editor of Android Studio because there is no such XML view id in the layouts - I create this RecyclerView programmatically.
So how do I detect views that have been inflated programmatically with Espresso?
回答1:
First of all, Espresso allows you to use Hamcrest matchers in tests.
Hamcrest 1.3 Quick Reference.
The most useful for catching the programmatically added views are withChild
, withParent
, hasSibling
, and hasDescendant
.
To make it more clear, I would give a simple example from my app:
onView(withId(R.id.action_bar_details))
.check(matches(withChild(withChild(withText("Details")))));
Secondly, for RecyclerView
tests in Espresso use onData
methods instead onView
.
Espresso 2.1. Espresso Cheat Sheet Master
Another example from my app - using onData
method
onData(anything()).inAdapterView(withId(R.id.listView)).atPosition(getRandomPosition()).
onChildView(withId(R.id.item)).check(matches(isDisplayed()));
Finally, check these great Googles repository for get more examples
- GoogleSample
- GoogleCodeLabs
来源:https://stackoverflow.com/questions/34000017/how-do-i-detect-a-view-that-i-have-created-programmatically-in-espresso