3

我正在编写 Android 功能测试。我需要设备处于唤醒状态并可视化应用程序以便它们工作。为此,我咨询了Android 开发人员。但是,建议的解决方案存在几个问题:

  • 建议的方法现在有几个不推荐使用的方法。Android API 现在建议我在窗口上使用标志:

此类在 API 级别 13 中已弃用。请改用 FLAG_DISMISS_KEYGUARD 和/或 FLAG_SHOW_WHEN_LOCKED;这允许您在应用程序移入和移出前台时无缝隐藏键盘保护,并且不需要请求任何特殊权限。由 newKeyguardLock(String) 返回的句柄,允许您禁用/重新启用键盘保护。

我尝试了这个建议,但是,与不推荐使用的解决方案相反,flag one jsut 对我不起作用 - 它不会解锁设备。我还找到了确认标志解决方案不稳定性的消息来源(例如对此答案的评论)。

  • 第二个问题是我需要为被测应用程序添加权限。我发现这是一种非常错误的方法(修改被测代码以便能够对其进行测试)。我找到了几个建议我使用src/debug/AndroidManifest.xml的地方(例如这个这个。然而,它并没有像所说的那样发生 - 调试 Mainfest 不会包含在设备上部署的东西中。它与我构建和部署的方式有关吗?我使用 Eclipse 进行开发 (ADT)。只有当我使用像 ant 这样的构建工具时,这种清单注入才会起作用吗?

总而言之 - 有人可以建议在我的测试执行时解锁和保持设备唤醒的稳定解决方案吗?

编辑

我现在发现RobotiumunlockScreen在他们最新版本的框架中也包含了方法。它完全使用了上面建议的窗口标志,也不能在我的设备上运行。

4

4 回答 4

1

UiDevicehaswakeUp()方法的实例

如果屏幕关闭,此方法模拟按下电源按钮,否则如果屏幕已经打开,则它不执行任何操作。如果屏幕关闭并且刚刚打开,此方法将插入 500 毫秒延迟,以让设备有时间唤醒并接受输入。

但是我不知道解锁屏幕存在类似的方法,所以我目前的解决方案是删除锁定模式(在测试设备上设置为NONE )

于 2016-03-18T13:22:29.200 回答
0

在运行 Robotium 测试时,我遇到了同样的解锁不可靠问题。我没有找到以编程方式解锁可靠工作的设备的解决方案,但我做了两件事作为变通方法。

  • 只需禁用锁定屏幕 ( Settings -> Security -> Screen lock -> None)。不理想,但归根结底,可靠的测试很重要。

  • 启用“保持清醒”设置以防止屏幕因不活动而关闭 ( Settings -> Developer options -> Stay awake)。一些 OEM/手机要么没有该选项,要么仍然关闭,所以对于那些讨厌的设备,我安装了KeepScreenOn应用程序。

警告:每天 24 小时保持屏幕打开,坐在主屏幕上可能会导致一些屏幕烧屏/重影。我不确定这是否是永久性的,但请注意这一点。在我们的案例中,我们使用的是专用测试设备,所以这没什么大不了的。

另请注意,由于手机将始终打开屏幕,您可能需要调暗亮度以使用更少的电池电量(通过 USB 充电有时会很慢)。

于 2014-06-23T20:32:47.427 回答
0

我在不推荐使用的方法和新方法上都遇到了类似的麻烦。最终,我完成了这个 hack,只需发送一个向上滑动手势即可解锁:

KeyguardManager keyguardManager = (KeyguardManager) InstrumentationRegistry.getContext().getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager.isKeyguardLocked()) {
  UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
  int x = device.getDisplayWidth() / 2;
  int startY = device.getDisplayHeight();
  int endY = 0;
  device.swipe(x, startY, x, endY, 50);
}

它依赖于锁屏的细节,但到目前为止效果出奇的好。

于 2016-09-17T12:22:11.300 回答
0

到目前为止,唯一对我有用的是在测试之前启动唤醒设备脚本。脚本通过向所有设备发送关键事件来从 cli 解锁设备。解锁部分在我的经验中很重要,某些设备不允许您从 cli 解锁它们(您仍然需要刷卡),在这种情况下,我建议在 Google Play 上查看“无锁定”应用程序,它应该会有所帮助,但可能不适用于所有设备。

我正在研究 Gradle 插件,它会在 Gradle 构建过程中运行仪器测试之前做同样的事情。

于 2016-04-25T12:53:24.593 回答