我一直在用 androids new espresso 框架编写测试,发现它运行良好。一件烦人的事情(不是浓缩咖啡特有的)是我必须确保我的屏幕处于唤醒状态并解锁才能运行测试。我找到了一种解决方法(通过各种来源),但是我不确定集成它的最佳方法。
所以这就是我所做的,在我的“家庭”活动中,我有以下代码:
家庭类:
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,因为它将自动生成。
但是我想知道是否有另一种方法可以在不创建变体的情况下执行此操作,然后指定测试应该运行该变体。此外,我不确定所有这些的确切语法,并认为将这些信息放在网站上供其他人使用会很好,因为它似乎分散在各处。
最后,如果有人知道更好的方法来解决唤醒电话以进行测试的问题,我很乐意听到它,因为我不是我正在尝试的这种方式的忠实粉丝。