You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose测试切换方向报No compose views found错误如何修复?

报错原因

你触发屏幕切换时,Android系统默认会销毁并重建当前Activity,测试使用的Compose规则与重建前的Activity绑定,重建后丢失了Compose视图的引用,就会抛出找不到Compose视图的异常。手动测试正常是因为重建后Activity会重新加载你的Composable内容,但是自动化测试的上下文没有跟着重建更新,所以找不到节点。

修复方案
  • 给测试用Activity配置配置变更处理策略
    在androidTest目录下的AndroidManifest.xml中添加如下配置,让系统在横竖屏切换时不销毁Activity,由应用自行处理配置变更:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <activity
            android:name="androidx.activity.ComponentActivity"
            android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout" />
    </application>
</manifest>
  • 调整测试规则,切换屏幕后等待界面渲染完成
    将原来的无Activity Compose测试规则替换为带官方ComponentActivity的测试规则,同时点击按钮后添加等待界面空闲的逻辑,确保横竖屏切换完成后再执行断言:
@get:Rule
val composeRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun test() {
    composeRule.setContent { MyApp() }
    // 初始竖屏校验
    composeRule.onNodeWithText("P").assertIsDisplayed()
    // 点击切换横屏
    composeRule.onNodeWithText("DO IT").performClick()
    // 等待界面更新完成
    composeRule.waitForIdle()
    // 校验横屏文本
    composeRule.onNodeWithText("L").assertIsDisplayed()
}

补充优化点:你现有代码中判断横竖屏用的LocalConfiguration.current.orientation对应常量是Configuration.ORIENTATION_PORTRAIT和Configuration.ORIENTATION_LANDSCAPE,和你对比的ActivityInfo.SCREEN_ORIENTATION_PORTRAIT值碰巧一致能正常运行,建议替换成Configuration下的常量,避免后续系统版本更新出现兼容性问题。

内容的提问来源于stack exchange,提问作者theapache64

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:48:02