![](/img/trans.png)
[英]How Android Espresso click an item in Recycler View inside Recycler View?
[英]Clicking inside a Recycler view: Espresso
我試圖單擊“回收者”視圖內的菜單項,我有以下代碼。
onView(allOf(withId(R.id.section_list),isDisplayed())).perform(RecyclerViewActions.actionOnItem(hasDescendant(withText("ABC")), MyViewAction.clickChildViewWithId(R.id.payment_menu)));
MyViewAction看起來像這樣:
class MyViewAction {
public static ViewAction clickChildViewWithId(final int id) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return null;
}
@Override
public String getDescription() {
return "Click on a child view with specified id.";
}
@Override
public void perform(UiController uiController, View view) {
View v = view.findViewById(id);
v.performClick();
}
};
}
android.support.test.espresso.PerformException:在ID為com.em3Agri.operation.debug:id / section_list的視圖上執行“ android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction@2fd64b56”時出錯。 在android.support.test.espresso.PerformException $ Builder.build(PerformException.java:83)在.........原因:java.lang.IllegalStateException:位置38處沒有視圖持有者。 support.test.espresso.contrib.RecyclerViewActions $ ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:290)在android.support.test.espresso.ViewInteraction $ 1.run(ViewInteraction.java:144)
我不知道這是否是您所面臨錯誤的根本原因,但您應嚴格遵守matcher
和action
之間的區別,即
RecyclerViewActions.actionOnItem(
hasDescendant(withText("ABC")),
MyViewAction.clickChildViewWithId(R.id.payment_menu)
)
應該寫成
RecyclerViewActions.actionOnItem(
<something-that-selects-R.id.payment_menu-in-your-view-item>,
click()
)
something-that-selects-R.id.payment_menu-in-your-view-item
實際上取決於您的視圖設置,可能很難正確定義,因此也許其他方法之一(例如actionOnHolderItem
)可能是更合身。 這也應該運行得更快,因為它可以直接跳轉到特定查看者所標識的視圖,而Matcher<View>
版本只能逐項“滾動”您的RecyclerView
並檢查每個新綁定的版本。
怎么樣:
onView(withId(R.id.section_list))
.perform(
RecyclerViewActions.actionOnItem(
hasDescendant(withId(R.id.payment_menu)),
ViewActions.click()
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.