JavaからConvertして多少手直ししただけなのでもっといろんなことができるはず。
参考は以下
https://www.takaiwa.net/2016/05/espressorecyclerview.html
これで使いまわしたいViewのIdとpositionをRecyclerViewActions.actionOnItemAtPosition内で指定することでそこのViewがクリックされる。
object MyViewAction {
fun clickChildViewWithId(id: Int): ViewAction {
return object : ViewAction {
override fun getConstraints(): Matcher<View> ?{
return null
}
override fun getDescription(): String {
return ""
}
override fun perform(uiController: UiController, view: View) {
val v = view.findViewById<View>(id)
if (v != null) {
v.performClick()
}
}
}
}
}これをこんな感じに使う。
RecyclerViewの中にあるデータが入っているかどうかを確認するだけならrecyclerView.check(matches(withText("")))でいいっぽいけど、任意の位置にあるデータが入っているかを確認するには結構めんどくさい手順がいるみたい。
clickChildViewWithIdは使いまわすViewのIdを指定している。
MainAdapter.MainViewHolderはViewHolderを継承させて自分で定義したもの。
@Test
fun onClickButtonInRecyclerView(){
val recyclerView = onView(withId(R.id.recyclerview))
var rand = (0..30).random()
recyclerView.perform(
RecyclerViewActions.actionOnItemAtPosition<MainAdapter.MainViewHolder>(rand,MyViewAction.clickChildViewWithId(R.id.button))
)
recyclerView.check(matches(withText("")))
intended(
allOf(
hasComponent(hasShortClassName(".SubActivity")),
toPackage("work.prgrm.sample"),
hasExtra("position",rand)
)
)
}Intentの説明