繁体   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