使用 Espresso 2.2.2 进行沉浸式模式确认

问题描述 投票:0回答:4

由于沉浸式模式确认弹出窗口,Google 云测试服务器上的某些虚拟设备似乎无法正确执行测试(如下所示:https://developer.android.com/training/system-ui/immersive.html) - 有没有办法用 Espresso 自动关闭该弹出窗口?基本上我的代码可以在本地模拟器中运行,但不能在谷歌云服务器上运行。 这就是失败的地方:

View v = activity.getWindow().getDecorView();
v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
android junit4 android-espresso android-junit
4个回答
1
投票

我已经使用类似版本的@paul-t解决了这个问题。模拟器启动后,运行下一个命令:

adb shell settings put secure immersive_mode_confirmations confirmed

之后您可以执行 Espresso 测试。

灵感:http://sviatoslavdev.blogspot.com/2018/02/adb-setings-secure.html


0
投票

您可以在模拟器启动后立即运行这些 ADB 命令:

adb shell settings put secure immersive_mode_confirmations your.package.com
adb reboot (required)

immersive_mode_confirmations 是逗号分隔的软件包列表,不再需要沉浸模式确认


0
投票

我找到了一个可行的解决方案。它与 Paul 的答案类似,但是是在测试运行之前以编程方式设置权限,而不是使用 ADB。 有一个 LinkedIn 开源库可以为您完成所有操作,从获取 WRITE_SECURE_SETTINGS 权限到动态更改沉浸式确认对话框的需求。 设置库后,在测试开始之前使用以下行:

TestButler.setImmersiveModeConfirmation(false);

有关更多详细信息和设置说明,请访问此处


0
投票

基于 jmartinalonso 的回答。我通过将以下代码添加到

@BeforeClass
函数来解决:

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice

try  {
    UiDevice
        .getInstance(InstrumentationRegistry.getInstrumentation())
        .executeShellCommand("settings put secure immersive_mode_confirmations confirmed")
}catch (_: IOException) {

}
© www.soinside.com 2019 - 2024. All rights reserved.