2017-03-17 51 views
6

在咖啡類:Espresso.pressBack()不調用onBackPressed()

@Rule 
    public IntentsTestRule<MainActivity> mIntentsRule = new IntentsTestRule<>(
      MainActivity.class); 

@Test 
public void test_backButton(){ 
onView(withId(R.id.NEXT_ACTIVITY)).perform(scrollTo(), click()); 

Espresso.pressBack(); 
} 

在活動:

@Override 
public void onBackPressed() { 
    Log.d("TEST_pressBack", "inside onBackPressed()"); 
    do_something(); 
    super.onBackPressed(); 

} 
    @Override 
public void finish() { 
    Log.d("TEST_pressBack", "inside finish()"); 
    super.finish(); 

} 

當我調用咖啡測試方法的執行直接轉到finish()

當我按下後退按鈕(用我的手)在Activity執行首先在onBackPressed(),然後到finish()。 如何使用Espresso測試功能onBackPressed()? 謝謝!編輯: 這是我的錯誤。問題是,在我想要調用pressBack的Activity中,屏幕鍵盤已打開。當軟鍵盤打開時,按鈕不會調用onBackPressed,而是使鍵盤不顯示。我連續兩個pressBack()嘗試,它工作正常:

@Rule 
    public IntentsTestRule<MainActivity> mIntentsRule = new IntentsTestRule<>(
      MainActivity.class); 

@Test 
public void test_backButton(){ 
onView(withId(R.id.NEXT_ACTIVITY)).perform(scrollTo(), click()); 

Espresso.pressBack(); 

//The extra pressBack() 
Espresso.pressBack(); 

} 
+1

您可以使用Espresso.closeSoftKeyboard() –

回答

4

它看起來像Espresso.pressBack()方法不只是工作,你希望它的方式,如果你是不是在根系活力。當你看看它的實現註釋:

/** 
    * Press on the back button. 
    * 
    * @throws PerformException if currently displayed activity is root activity, since pressing back 
    *   button would result in application closing. 
    */ 
    public static void pressBack() { 
     onView(isRoot()).perform(ViewActions.pressBack()); 
    } 

我測試了它,如果你是在一個活動,是不是你的根系活力這樣它工作正常。如果你想這樣做在那裏,我會建議你使用的用戶界面,自動機代替(UI-的Automator是非常有用的內部咖啡試驗):

添加到您的gradle產出:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' 

然後做到這一點在您的測試:

UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
mDevice.pressBack(); 
+1

這是我的錯誤。問題是在我想要調用pressBack的Activity中,屏幕鍵盤已打開。當軟鍵盤打開時,按鈕不會調用onBackPressed,而是使鍵盤不顯示。我嘗試了兩個pressBack(),它工作正常 – billst

0

@billst你是對的,我也曾經有過用軟鍵盤開了同樣的問題,我讀您的評論和更好的解決方案後,調試是使用ViewAction.closeSoftKeyboard()而不是使用回按兩次。

@Test 
public void afterStartedEditing_dialogDisplayed_when_home_or_back_pressed() { 
    //find view 
    onView(withId(R.id.add_pet_breed)) 
      .perform(click()) 
      .perform(closeSoftKeyboard()); 
    onView(isRoot()).perform(pressBack()); 

    //check assertion 
    onView(withText(R.string.discard)) 
      .check(matches(isDisplayed())); 
}