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

Android全屏提示弹窗导致Espresso测试失败的解决咨询

解决全屏提示弹窗导致的Espresso测试失败问题

针对你在Nexus 7 API 23模拟器上遇到的全屏提示弹窗(“正在全屏查看,如需退出请从顶部向下滑动”)导致Espresso测试失败的问题,这里有几个可行的解决方案:

方案1:通过ADB命令永久禁用该弹窗

这个弹窗是Android系统针对沉浸式模式的首次提示,你可以通过ADB命令预先关闭它,这样测试运行时就不会再弹出:

adb shell settings put global immersive_mode_confirmations confirmed

把这个命令添加到构建服务器的模拟器初始化脚本中,在启动测试前执行,就能确保所有测试运行时都不会遇到这个弹窗。

方案2:在测试中自动检测并点击“Got it”按钮

如果无法修改构建服务器的初始化步骤,你可以借助UiAutomator(与Espresso兼容)来自动处理这个系统弹窗——因为Espresso默认只操作APP内视图,而系统弹窗属于系统UI,需要用UiAutomator定位。

你可以创建一个全局的TestRule,在每个测试执行前检查并处理弹窗:

import androidx.test.InstrumentationRegistry;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.UiDevice;
import androidx.test.uiautomator.Until;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

public class DismissImmersivePopupRule implements TestRule {
    @Override
    public Statement apply(Statement base, Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
                // 等待弹窗出现(最多5秒)
                if (device.wait(Until.hasObject(By.text("Got it")), 5000)) {
                    device.findObject(By.text("Got it")).click();
                }
                base.evaluate();
            }
        };
    }
}

然后在你的测试类中添加这个Rule:

@Rule
public DismissImmersivePopupRule dismissPopupRule = new DismissImmersivePopupRule();

// 你的测试方法...

这个规则会在每个测试开始前检查是否有“Got it”按钮,若存在则点击关闭,不会干扰正常测试流程。

方案3:调整模拟器的系统设置(适合手动配置场景)

如果你有权限修改模拟器配置,可以在创建模拟器后预先关闭沉浸式模式提示:

  • 启动模拟器,进入设置 > 显示 > 全屏应用
  • 找到你的应用,关闭“首次进入全屏时显示提示”选项
    不过这种方法在构建服务器上需要手动配置镜像,不如ADB命令灵活。

另外,注意到你报错信息里提到Animations or transitions are enabled on the target device,虽然这不是本次问题的直接原因,但禁用系统动画能让Espresso测试更稳定,你也可以在测试初始化时添加这些ADB命令:

adb shell settings put global window_animation_scale 0.0
adb shell settings put global transition_animation_scale 0.0
adb shell settings put global animator_duration_scale 0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:42:45