2015-01-11 2 views
15

私は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」内のボタン1にアクセス一見ができません3つすべてのボタンにアクセスする必要はありません。

は、私は次のようにボタンにアクセスしようとしている:

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 

エラー一致するものが見つからなかったと私に伝えます。

私が使用しているコードは、私がエスプレッソを初めて使う人には合っていますが、誰かがアドバイスを提供することはできますか?

答えて

15

これは同じレイアウトで同じカスタムxmlを<include/>にしようとするときの一般的な落とし穴です。あなたは今boxes.xmlが複数回含まれているため

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

呼び出ししようとした場合

は、いつでも、結果として最初のサブレイアウトに存在するボタン、そして決して別のものを取得します。

あなたはかなり近いですが、withParent()ビューマッチャーを使用する必要があります。

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

ありがとうございました!私が問題を解決したとき、私は本当にこれに自分自身で答えるべきだった。しかし、あなたが正しいです、私はこの問題に取り組んでいたときに右ボタンを選択する複雑なセレクタを持っていました。 –

関連する問題