gpt4 book ai didi

android - Espresso.pressBack() 不会调用 onBackPressed()

转载 作者:行者123 更新时间:2023-12-02 03:27:05 25 4
gpt4 key购买 nike

在 Espresso 类(class)中:

@Rule
var mIntentsRule = IntentsTestRule(MainActivity::class.java)

@Test
fun test_backButton() {
onView(withId(R.id.NEXT_ACTIVITY)).perform(scrollTo(), click())
Espresso.pressBack()
}

Activity 中:

@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();
}

当我调用 Espresso 测试方法时,执行会直接转到 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();
}

最佳答案

如果您不在根 Activity 中,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());
}

我测试了它,如果您在不是根 Activity 的 Activity 中执行此操作,它可以正常工作。如果您想在那里执行此操作,我建议您使用 ui-automator (ui-automator 在 espresso 测试中完全可用):

将其添加到您的 gradle 中:

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

然后在测试中执行此操作:

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

关于android - Espresso.pressBack() 不会调用 onBackPressed(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42861182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com