Android Espresso - 单击带图像和文字的抽屉项目

问题描述:

当抽屉导航包含图像和文本视图的行列表时,如何单击导航抽屉项目?Android Espresso - 单击带图像和文字的抽屉项目

我用从咖啡测试源例如:GIT中/ testapp_test/SRC /主/ JAVA/COM /谷歌/机器人/应用/普通/测试/ UI/testapp/DrawerActionsTest.java

我检索到的DrawerActions和DrawerMatchers的贡献,并把它们放在我的测试项目中。

导航抽屉行是:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:background="@drawable/list_selector"> 

    <ImageView 
     android:id="@+id/icon" 
     etc ... /> 

    <TextView 
     android:id="@+id/title" 
     etc.... /> 

</RelativeLayout> 

导航项目是:

public class NavDrawerItem { 
    public String title; 
    public int icon; 
    .... 

    // a matcher 
    @Override 
    public boolean equals(Object mob2) { 
     String otherName = ((NavDrawerItem) mob2).title; 
     return(title.equals(otherName)); 
    } 
} 

甲NavigationDrawerAdapter填充导航抽屉视图。

Espresso测试来源打开抽屉,关闭它,重新打开它......但我找不到第一个“导入”项目的匹配项。因此,测试在执行点击时停止。

的代码是:

public LearnerAppAutoTest() { 
    super(MainActivity.class); 
} 
@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    getActivity(); 
} 

public void testOpenAndCloseDrawer() { 
    openDrawer(R.id.drawer_layout); 
    closeDrawer(R.id.drawer_layout); 

    openDrawer(R.id.drawer_layout); 
    onView(withId(R.id.drawer_layout)).check(matches(isOpen())); 

    String rowContents = "Import"; 

    // Option 1: too many lists having an "Import" string 
    onData(allOf(is(instanceOf(String.class)), is(rowContents))).perform(click()); 

    // Option 2: selecting on NavDrawerItem.class and a matcher 
    // ... still all matches, also in other lists match. Why? They don't have NavDrawerItems. 
    onData(allOf(is(instanceOf(NavDrawerItem.class)), is(rowContents))).perform(click()); 

    // Option 3: custom matcher 
    // ... still all matches, also in other lists match. Why? 
    onData(allOf(instanceOf(NavDrawerItem.class), navDrawerItemHavingName(rowContents))).perform(click()); 

    } 

所以,无论我的程序,有多个匹配器......甚至从没有NavDrawerItem类名单。

+0

什么错误信息你好吗? – yogurtearl 2014-11-06 02:04:56

+0

很忙,重新编写应用程序的心脏... 错误消息是: com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException:'是可以从类:class android .widget.AdapterView'匹配层次结构中的多个视图。 我的问题是...如何指定要搜索的列表? – tjm1706 2014-11-08 15:19:48

试试这个:

Espresso.onView(Matchers.allOf(ViewMatchers.withId(R.id.drawerItemNameTextView), ViewMatchers.hasSibling(ViewMatchers.withText(((NavDrawerItem)item).getItemName())))).perform(ViewActions.click()); 
+1

哇,令人印象深刻,...感谢很多。 我想这个工程当导航抽屉项目在视图中。 – tjm1706 2014-12-26 13:44:18