簡體   English   中英

在回收站視圖中單擊:Espresso

[英]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)

我不知道這是否是您所面臨錯誤的根本原因,但您應嚴格遵守matcheraction之間的區別,即

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM