我有一个有Text
和Button
的Composable
。如果当前方向是纵向的,Text
将显示P
,否则显示L
。点击Button
会将方向改为横向,(之后,它应该会将P
的文本改为L
)
这是可组合
@Composable
fun MyApp() {
val currentOrientation = LocalConfiguration.current.orientation
val orientation = if (currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
"P"
} else {
"L"
}
val activity = LocalContext.current as Activity
Column {
Text(text = orientation)
Button(onClick = {
// change orientation to landscape
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
}) {
Text(text = "DO IT")
}
}
}
,下面是我测试它的方法
@get:Rule
val composeRule = createComposeRule()
@Test
fun test() {
composeRule.setContent { MyApp() }
// Starts with portrait
composeRule.onNodeWithText("P").assertIsDisplayed()
// Change the orientation to Landscape
composeRule.onNodeWithText("DO IT").performClick()
// Now the text should be `L`
composeRule.onNodeWithText("L").assertIsDisplayed()
}
但是当我运行测试以查看文本是否更新时,我得到了下面的错误。(手动测试仍然有效)
java.lang.IllegalStateException: No compose views found in the app. Is your Activity resumed?
at androidx.compose.ui.test.TestContext.getAllSemanticsNodes$ui_test_release(TestOwner.kt:96)
at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNodes$ui_test_release(SemanticsNodeInteraction.kt:82)
at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrDie(SemanticsNodeInteraction.kt:155)
at androidx.compose.ui.test.SemanticsNodeInteraction.assertExists(SemanticsNodeInteraction.kt:147)
at androidx.compose.ui.test.SemanticsNodeInteraction.assertExists$default(SemanticsNodeInteraction.kt:146)
如果你想自己试试,这里是完整的测试文件。
- 我在这里错过了什么,我该如何修复它?
测试时屏幕是否打开?
在我的例子中,这很容易通过简单地关闭屏幕来重现。注意,我使用的是模拟器。
我在执行单击事件时遇到了同样的问题。当我用我的设备进行测试时,当您的测试设备/模拟器的屏幕未唤醒(关闭)时发生了这种情况。
我的解决办法就是打开屏幕。