2016-09-21 7 views
1

の最初の項目を開きます。エスプレッソ:呼び出すopenActionBarOverflowOrOptionsMenu()は、私は以下エスプレッソ試験を持っているメニュー

openActionBarOverflowOrOptionsMenu(InstrumentationRegistry.getTargetContext()); 

    // if I Thread.sleep() here, I can see that the MenuItem has been clicked already 

    onView(withText("Sign in")) //<= click on the MenuItem 
      .perform(click()); 

    onView(withId(R.id.signupButton)) //<= click the signup button in my UI 
      .perform(click()); 

アップが最初の行には、オーバーフローメニューを開き、同時に最初の項目をクリックする(これ起こったのはサインインアイテムです)。そのため、MenuItemビューが見つからないためテストが失敗します。私が間違っていることは何ですか?エミュレータAPI 22を使用しています。もう一度targetSdk 24をコンパイルし、エスプレッソ2.2.1を使用しています。

+0

あなたはあなたのテストクラスでActivityTest Ruleを使っているとします。 'openActionBarOverflowOrOptionsMenu(mActivityRule.getActivity()); ' – piotrek1543

+0

同じ問題:-( – mbonnin

答えて

0

それを試してみてください。

public class EspressoMatchers {  
    public static Matcher<View> withOverflowMenuButton() { 
     return anyOf(allOf(isDisplayed(), withContentDescription("More options")), 
       allOf(isDisplayed(), withClassName(endsWith("OverflowMenuButton")))); 
    } 
} 

がオーバーフローメニューを開くには:

onView(allOf(EspressoMatchers.withOverflowMenuButton(), 
      isDescendantOfA(withId(R.id.toolbar)))).perform(click()); 

はその後、それが正常に動作する必要があります。 Toolbarに正しいIDを使用してください。私はこれがちょうど Espressoクラスのコピーであることを知っていますが、私もこの問題に遭遇し、これが私を助けました。

IDが機能しないため、常にIDではなく「名前で」メニュー項目をクリックしてください。だから、あなたの "クリック項目"はうまくいくはずです:

onView(withText("Sign in")) //<= click on the MenuItem 
     .perform(click()); 
+0

同じ問題:-( – mbonnin

+0

@mbonninあなたのテストデバイスでアニメーションを無効にしましたか? – tomrozb

関連する問題