2016-05-13 86 views
0

我有一個活動2列表視圖,我想查找第一個ListView的孩子,但我找到第一個ListView的孩子和第二個ListView,爲什麼?請幫幫我。espresso onData匹配層次結構中的多個視圖

代碼:

DataInteraction dataInteraction = 
      onData(allOf(
        withClassName(endsWith("LinearLayout")), 
        hasSibling(withText("9.0")), 
        hasSibling(withText("襯衫")) 
      )); 
     dataInteraction.onChildView(withId(R.id.order_untake_jijia_listview_jia)) 
       .atPosition(0); 
     dataInteraction.perform(ViewActions.click()); 

它發現:

ListView{id=2131493579, res-name=order_jijia_listview, visibility=VISIBLE, width=768, 
      height=659, has-focus=false, has-focusable=true, has-window-focus=true, 
      is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true, 
      is-layout-requested=false, is-selected=false, root-is-layout-requested=false, 
      has-input-connection=false, x=0.0, y=345.0, child-count=7} ****MATCHES**** 

ListView{id=2131493586, res-name=order_jijia_pop_listview, visibility=VISIBLE, 
      width=0, height=0, has-focus=false, has-focusable=false, 
      has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, 
      is-focusable=false, is-layout-requested=true, is-selected=false, 
      root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, 
      child-count=0} ****MATCHES**** 

回答

0

你有兩場比賽,因爲你必須使用一個RecyclerView。這就是爲什麼espresso會在佈局中找到具有相同標識的兩個元素。

看一看這個答案: Espresso RecyclerView inside ViewPager

而且,我認爲它可以匹配多個觀點是,如果有一個在您的應用程序泄漏,但我認爲這更可能是你使用recyclerview,只有你需要以適當的方式訪問它。

還有你已經在不同的佈局定義的相同ID,其中有些是在內存中,即使它們不是在同一時間在屏幕上,在這種情況下,你可以使用isCompletelyDisplayed的可能性()方法以匹配顯示的那個。

希望這會有所幫助。

0

你必須指向哪個適配器鑑於咖啡應該做的搜索/動作:

onData(allOf(withClassName(endsWith("LinearLayout")), 
     hasSibling(withText("9.0")), 
     hasSibling(withText("襯衫")))) 
      .inAdapterView(withId(R.id.order_jijia_listview)) 
      .onChildView(withId(R.id.order_untake_jijia_listview_jia)) 
      .atPosition(0) 
      .perform(click());