【发布时间】:2021-11-17 22:21:13
【问题描述】:
我一直在用 androids 的新 espresso 框架编写测试,发现它运行良好。一件烦人的事情(不是浓缩咖啡特有的)是我必须确保我的屏幕处于唤醒状态并解锁才能运行测试。我找到了一种解决方法(通过各种来源),但我不确定集成它的最佳方法。
这就是我所做的,在我的“主页”活动中,我有以下代码:
Home.class:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/************ Put this in a conditional for a test version ***********/
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock keyguardLock = km.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
还需要添加以下权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
因此,在完成此操作后,我的测试现在唤醒我的手机运行,这样我就不必站岗并确保屏幕在测试开始前不会关闭。
我宁愿不在我的应用程序中包含这些权限。我知道使用 gradle 可以制作具有自己的 android 清单的不同“风味”,这些清单将合并到主清单中。我正在考虑使用它,但我不想仅仅因为这个原因添加风味,因为它已经在使用测试构建类型来运行。从 android gradle 文档看来,您无法为 instrumentTest 目录创建 AndroidManifest,因为它将自动生成。
但是我想知道是否有另一种方法可以在不创建变体的情况下执行此操作,然后指定测试应该运行该变体。此外,我不确定所有这些的确切语法,并认为将这些信息放在网站上以供其他人使用会很好,因为它似乎分散在各处。
最后,如果有人知道解决唤醒电话以进行测试的问题的更好方法,我很乐意听到它,因为我不喜欢我正在尝试的这种方式。
【问题讨论】:
-
不是简单的电源管理器部分唤醒锁定吗?
-
我不想让我的应用在测试期间保持清醒(这会自行发生),我想唤醒它以开始测试。如果我可以从测试代码本身而不是应用程序中唤醒,我更愿意,但我不知道如何。
-
唤醒应用程序的机制是AlarmManager。不知道浓缩咖啡,对不起
标签: android android-testing android-wake-lock android-espresso