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

Espresso测试强制竖屏Activity时方向断言失败问题

问题描述

我正在使用Espresso测试一款Android应用,其中有一个Activity需强制保持竖屏显示。我通过代码在Activity启动时锁定竖屏,正常使用时功能正常。

但在Espresso测试中遇到问题:我先通过以下代码模拟设备旋转:

val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
device.setOrientationRight()

设备成功转为横屏,随后导航至该强制竖屏的Activity,Activity确实按预期以竖屏显示。

我用以下代码验证方向:

val context = ApplicationProvider.getApplicationContext<Context>()
val orientation = context.resources.configuration.orientation
assertEquals(Configuration.ORIENTATION_PORTRAIT, orientation)

但测试失败,返回的方向为Configuration.ORIENTATION_LANDSCAPE,尽管Activity显示的是竖屏布局。

似乎设备仍处于横屏状态,系统级配置未更新以反映Activity的强制竖屏设置。由于仅存在竖屏布局文件,无法通过检查布局来验证方向。

请问如何正确测试该行为?是否有方法断言Activity确实锁定竖屏,即便设备方向已更改?

解决方案
  • 获取当前Activity的Configuration而非全局Context
    应用全局Context的配置跟随系统设备方向,不会因单个Activity的强制竖屏改变。要获取当前测试Activity的Context来读取配置:

    val scenario = ActivityScenario.launch(YourTargetActivity::class.java)
    scenario.onActivity { activity ->
        val orientation = activity.resources.configuration.orientation
        assertEquals(Configuration.ORIENTATION_PORTRAIT, orientation)
    }
    
  • 直接断言Activity的锁定方向参数
    跳过系统配置,直接验证Activity本身的竖屏锁定设置,这是最直接的方式:

    val scenario = ActivityScenario.launch(YourTargetActivity::class.java)
    scenario.onActivity { activity ->
        assertEquals(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, activity.requestedOrientation)
    }
    
  • 结合UiDevice验证视觉方向(补充方案)
    若需确认界面视觉上为竖屏,可通过屏幕宽高比例判断:

    val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    val displaySize = device.displaySize
    assertTrue(displaySize.y > displaySize.x)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:35