2015-01-11 83 views
15

我一直在使用Espresso來使用Android應用程序進行自動UI測試。 (我一直試圖在下班時在家中找到解決問題的辦法,所以我沒有確切的例子和錯誤,但明天早上我可以更新)。我遇到了單個用戶界面中包含多次佈局的單元測試按鈕問題。下面是一個簡單的例子:意式濃縮咖啡選擇包含版式的兒童

<include 
    android:id="@+id/include_one" 
    android:layout="@layout/boxes" /> 

<include 
    android:id="@+id/include_two" 
    android:layout="@layout/boxes" /> 

<include 
    android:id="@+id/include_three" 
    android:layout="@layout/boxes" /> 

這裏是什麼// @佈局/盒內的例子:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:id="@+id/button1" /> 
    <Button 
     android:id="@+id/button2" /> 
</RelativeLayout> 

我似乎無法給包括我想要的「include_one」中訪問按鈕,一個,而不訪問全部三個按鈕。

我試圖訪問與下面的按鈕:

onView(allOf(withId(R.id.include_one), isDescendantOfA(withId(R.id.button1)))).perform(click()); 

onView(allOf(withId(R.id.button1), hasParent(withId(R.id.include_one)))).perform(click()); 

這兩者我從這個回答中發現:onChildView and hasSiblings with Espresso不幸的是我還沒有成功!

我知道這是不是很大,但因爲我不是我的工作電腦,我不能告訴你我所遇到的具體錯誤,但我也遇到過:

com.google.android.apps.common.testing.ui.espresso.AmbiguousViewMatcherException 

也是錯誤的告訴我沒有找到匹配。

我使用的代碼是有道理的,儘管我對使用Espresso很陌生誰能提供一些建議,或者指出我可能會誤解?

回答

15

這是在同一個佈局中多次嘗試<include/>相同的自定義xml時常見的錯誤。

如果現在試着打電話

Button button1 = (Button) findViewById(R.id.button1); 

因爲boxes.xml包括不止一次,你總是會得到結果存在於第一子佈局的按鈕,永不另一個。

你非常接近,但你需要使用withParent()視圖匹配器。

onView(allOf(withId(R.id.button1), withParent(withId(R.id.include_one)))) 
       .check(matches(isDisplayed())) 
       .perform(click()); 
+0

感謝您的迴應!當我解決問題時,我真的應該自己回答這個問題。但是你是對的,當我處理這個問題時,我有一個複雜的選擇器來選擇正確的按鈕。 –