2016-08-19 42 views
0

我正在寫一個espresso測試,它檢查哪一個未能在FooterView中找到一個TextView,我以編程方式添加到ListView中。在espresso測試中查找TextView的唯一方法是等待在檢查此TextView是否存在之前持續1秒。ListView中的FooterView未找到使用Espresso

// checks if the list view contains an issue that has the text "Do" somewhere 
    onView(withId(R.id.listView)).check(matches(hasDescendant(withText(containsString("Do"))))); 
    // swipes down to access the load older issues button 
    onView(allOf(withId(R.id.mainLayout))).perform(swipeUp()); 

    // View listView = shelfActivity.getActivity().findViewById(R.id.listView_footer_textview); // returns the view, even when espresso tells that it does not exist 
    // Thread.sleep(1000); // need to wait in order to find the footerview of the list view 

    // check if the load older issues button is here 
    onView(allOf(withId(R.id.listView_footer_textview), isDisplayed())).check(matches(isDisplayed())); 

這的TextView的FooterView內部實際存在的,我可以找到它的同一個地方測試裏面,如果我嘗試用正常findById()方法得到它,但不覺得當我檢查它與濃咖啡。

所以我的問題是: 如果我想檢查一個FooterView內的TextView,我真的必須調用Thread.sleep(1000)來通過測試。對我來說,意式咖啡的巨大優勢在於,我不必等待視圖準備就緒,那麼現在是否沒有咖啡功能會自動執行此操作?

回答

0

您可以通過onData方法找到FooterView的ListView

這裏是official documents

例如:

public static final String FOOTER = "FOOTER"; 
... 
View footerView = layoutInflater.inflate(R.layout.list_item, listView, false); 
((TextView) footerView.findViewById(R.id.item_content)).setText("count:"); 
((TextView) footerView.findViewById(R.id.item_size)).setText(String.valueOf(data.size())); 
listView.addFooterView(footerView, FOOTER, true); 

然後,你可以寫,這個對象匹配的匹配:

import static org.hamcrest.Matchers.allOf; 
import static org.hamcrest.Matchers.instanceOf; 
import static org.hamcrest.Matchers.is; 

@SuppressWarnings("unchecked") 
public static Matcher<Object> isFooter() { 
    return allOf(is(instanceOf(String.class)), is(LongListActivity.FOOTER)); 
} 

和加載測試中的觀點很簡單:

import static com.google.android.apps.common.testing.ui.espresso.Espresso.onData; 
import static com.google.android.apps.common.testing.ui.espresso.action.ViewActions.click; 
import static com.google.android.apps.common.testing.ui.espresso.sample.LongListMatchers.isFooter; 

public void testClickFooter() { 
    onData(isFooter()) 
    .perform(click()); 
    ... 
} 
+0

這不是問題,我從來沒有fi找到我的頁腳視圖中的文本視圖,問題是我只有在讓踏面至少睡1秒後才能找到它。同樣的問題仍然存在,如果我添加is(LongListActivity.FOOTER)標準到我的搜索(實際上沒有必要作爲搜索id應該足夠)。 如上所述,當我搜索與shelfActivity.getActivity()。相同的textview時,這個問題也不會發生。findViewById();在那種情況下,我立即找到預期的文本視圖,而不需要睡1秒。 – richard

+0

我不明白這個問題,因爲'但是沒有找到有問題的FooterView',並且在上面的註釋中找不到我的頁腳視圖中的textview。 'R.id.listView_footer'是TextView的id? – nshmura

+0

抱歉,描述不太清楚,我現在編輯它。它無法在頁腳視圖中找到文本視圖,如果在檢查之前我不打電話睡眠(1000)。 – richard