2016-11-28 13 views
2

futuresimpleのAndroid Floating Action Buttonを使用しています。私はエスプレッソを使って、それと対話するUIテストを作成したいと思っています。 multiple_actionsは、フローティングアクションボタン(FAB)メニューを開くボタンです。 draw_fabは、multiple_actionsをクリックすると表示されるフローティングアクションボタンの1つです。 draw_fabをクリックすると、新しいアンドロイドのアクティビティが開始されます。このアクティビティでは、idがcomponentMenuButton(それ自体がメニューを表示します)の標準ボタンを押したいとします。AndroidでのエスプレッソUIテスト浮動アクションボタンのメニュー

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.multiple_actions)).perform(click()); 
    onView(withId(R.id.draw_fab)).perform(click()); 
    onView(withId(R.id.componentMenuButton)).perform(click()); 
    // other stuff... 
} 

このテストを実行すると、最初のクリックが動作し、フローティングメニューボタンが表示されることがわかります。しかし、draw_fabをクリックするコールには0の影響があるように見えます。は、componentMenuButtonをクリックするとエラーになります。

これは私が混乱するところです。

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.draw_fab)).check(matches(isDisplayed())); 
    View v = mActivityRule.getActivity().findViewById(R.id.draw_fab); 
    Log.d(TAG, String.valueOf(v.getVisibility()==v.VISIBLE)); 
    Log.d(TAG, String.valueOf(v.isShown())); 
    Log.d(TAG, String.valueOf(v.isEnabled())); 

    onView(withId(R.id.multiple_actions)).perform(click()); 
    onView(withId(R.id.draw_fab)).check(matches(isDisplayed())); 
    Log.d(TAG, String.valueOf(v.getVisibility()==v.VISIBLE)); 
    Log.d(TAG, String.valueOf(v.isShown())); 
    Log.d(TAG, String.valueOf(v.isEnabled())); 
} 

以上、私は何が起こっているのか理解しようとしています。 multiple_actions FABをまだクリックしていなくてもこのテストを実行すると、isDisplayedが成功し、すべてのログ出力がtrueになります。そして、次のセグメントでは、エスプレッソはmultiple_actionsをクリックし、再びすべての出力が真です。クリックのためにをクリックしてdraw_fabを呼び出すのと同じように、テストの合格に全く影響しません。これはどのようにするべきではありませんか?

浮動アクションボタンに使用しているレポは、単にエスプレッソの使用をサポートしていないということがあります。そこには、FABやエスプレッソの基本的なことがあります。どちらですか?

答えて

1

私は私がFabのために次のことを持ってテストしようとしている活動のための私のactivity_home.xmlを見れば(フローティングアクションボタン)

<com.getbase.floatingactionbutton.FloatingActionsMenu 
    android:id="@+id/multiple_actions" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    fab:fab_addButtonColorNormal="@color/colorPrimary" 
    fab:fab_addButtonColorPressed="@color/white_pressed" 
    fab:fab_addButtonPlusIconColor="@color/white" 
    fab:fab_labelStyle="@style/menu_labels_style" 
    android:layout_marginBottom="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginEnd="16dp"> 

    <com.getbase.floatingactionbutton.FloatingActionButton 
     android:id="@+id/draw_fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     fab:fab_colorNormal="@color/colorPrimary" 
     fab:fab_title="Draw Circuit" 
     fab:fab_colorPressed="@color/white_pressed" 
     fab:fab_icon="@drawable/ic_draw"/> 

は、だから私は、当然のid multiple_actionsをするために使用することができると考えましたFABのメニューを開くFABをクリックします。しかし、私が使用FABライブラリによって生成された私のプロジェクトで私が持っているvalues.xmlを見て、私はこの可能性hereから来

<item name="fab_expand_menu_button" type="id"/> 

を参照してください。代わりにこのID(私は書いていない)を使用すると、すべてが修正されます。私は、FAB idがトップレベルのハードコードされていると仮定します。

@Test 
public void simpleCircuitTest() { 
    onView(withId(R.id.fab_expand_menu_button)).perform(click()); 
    onView(withId(R.id.draw_fab)).perform(click()); 
    onView(withId(R.id.componentMenuButton)).perform(click()); 
    // other stuff... 
} 

もっと私がmultiple_actionsを使用するときに興味深いことに、私は視覚的なフィードバックがなかったため、実現しなかった(それは、画面上の別の場所に押した考え出したが、その後、私は、画面全体を取るためにHorizontalScrollViewを配置し、十分に確認してください私はエスプレッソがそれをクリックするのを見ています)、なぜこれらのログ値が常に真を返すのかが分かります。値は、FABをクリックして表示されていないかどうかに関係なく、画面上の別の要素に適用されます

関連する問題