Jetpack Compose 在自动化测试中按下后退按钮

Oli*_*etz 8 android-jetpack-compose android-jetpack-compose-testing

在jetpack compose测试(在真实设备上运行)中触发后退按钮按下的推荐方法是什么?

我想:

@get:Rule()
val composeTestRule = createAndroidComposeRule(MyActivity::class.java)

@Test
fun test() {
    // Here would be some setup code, assertions and navigating into a second screen
     
    // Navigate back to previous screen
    composeTestRule.onRoot().performKeyPress(KeyEvent(NativeKeyEvent(0, KeyEvent.KEYCODE_BACK)))

    // continue... 
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

java.lang.IllegalStateException: KeyEvent can't be processed because this key input node is not active.
Run Code Online (Sandbox Code Playgroud)

我没有任何特殊的按键/导航逻辑,仅使用导航撰写库的开箱即用功能。

Oli*_*etz 9

我最终使用了 ActivityScenarioRule:

composeTestRule.activityRule.scenario.onActivity { activity ->
   activity.onBackPressedDispatcher.onBackPressed()
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否是正确的方法,但它确实有效。

编辑:正如 LN-12 正确指出的那样,您应该使用onBackPressedDispatcher来支持API 33 的预测后退手势


cha*_*ait 4

我们可以使用下面的代码从可组合屏幕测试设备后退按钮

Espresso.pressBack()
Run Code Online (Sandbox Code Playgroud)