6

我在我的應用程序有三個活動的Android咖啡功能測試與片段

  1. 一個登錄活動
  2. 主要活動
  3. 一個細節活動

我想用咖啡來測試一系列事件:單擊登錄活動中的登錄按鈕(打開主活動),然後單擊主活動中的一個列表項,該活動將打開詳細活動,然後單擊詳細活動中的另一個按鈕。我開始通過創建這個簡單的測試,才能到列表視圖的引用:

public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> { 

    public LoginActivityTest() { 
     super(LoginActivity.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 

     getActivity(); 
    } 

    public void testSequence() throws Exception { 
     // Login 
     onView(withId(R.id.button_log_in)).perform(click()); 

     // Check if MainActivity is loaded 
     onView(withId(R.id.container)).check(matches(isDisplayed())); 

     // Check if Fragment is loaded 
     onView(withId(R.id.list)).check(matches(isDisplayed())); 
    } 
} 

mainActivityonCreate()方法我打開一個片段是這樣的:

getFragmentManager().beginTransaction() 
       .add(R.id.container, mListFragment) 
       .commit(); 

ListFragment片段具有列表(R.id.list),但仍然是測試失敗,出現NoMatchingViewException

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.tests.android.development:id/list 

我在做什麼錯?

+0

您是否找到了解決方案? – AdamMc331 2015-04-27 19:12:03

+0

如果您仍然在尋求幫助,請顯示與此問題相關的'onCreate()'的完整代碼。特別是顯示'mListFragment'的聲明和初始化。同時顯示'ListFragment'的XML佈局。 – 2017-02-17 02:45:15

回答

1

documentationonView的說明:

注:該視圖必須是視圖層次的一部分。這可能不是 這種情況,如果它作爲AdapterView(例如ListView)的一部分呈現的話。 如果是這種情況,請使用Espresso.onData首先加載視圖。

要使用onData加載視圖,您需要檢查無論您的適配器在ListView中的實例。換句話說,如果你的列表視圖中使用了遊標適配器,您可以試試這個:

onData(allOf(is(instanceOf(Cursor.class)))).check(matches(isDisplayed())); 

需要注意的是上面的,如果你的列表視圖中包含至少一個項目將只通過這一點很重要。在物品存在的地方進行一次測試,並在物品不存在的地方進行一次測試是一個好主意。

有關如何檢查確實存在的數據的更多信息,請參見here

有關如何檢查適配器中不存在的數據的更多信息,請參見here

+0

沒有任何數據匹配將把列表放入層次結構中,錯誤就是這樣。你的指導是有價值的,但只有**之後**手頭的錯誤得到解決,你沒有提供任何信息。 – TWiStErRob 2016-09-01 17:52:59

+0

提示:'onData(instanceOf(Cursor.class))'應該實現相同的數據查詢。 'allOf'對於單個匹配器來說沒有意義,而按定義來說'is'是多餘的。但是,如果它使得代碼讀得更加英文,'is'可能是有意義的,因爲'allOf',它不會。 – TWiStErRob 2016-09-01 17:56:26

0

在當前版本(Espresso 2.2.2)中,此例外總是附加一個View Hierarchy:子句,其中列出了所有可供匹配的視圖。漫步,並檢查你是否可以找到你的名單。

作爲替代方法:檢出android-sdk\tools\uiautomatorviewer.bat(或.sh),它從當前屏幕和層次結構中獲取快照。在列表匹配行上放置一個斷點,並與查看器一起檢查列表是否存在。如果您找到該列表,則測試中可能存在計時問題。也許它沒有足夠的等待,查看更多關於IdlingResource s。