我一直在用android的新espresso框架编写测试,发现它运行良好。一件令人烦恼的事情(不是特 espresso )是我必须确保屏幕醒着并解锁才能运行测试。我(通过各种来源)找到了一种解决方法,但是我不确定将其集成的最佳方法。
这就是我所做的,在“家庭” Activity 中,我有以下代码:
主页.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 list 的不同“ flavor ”,这些 list 将合并到主要 list 中。我当时正在考虑使用它,但由于这个原因,我不想添加一种 flavor ,因为它已经在使用测试构建类型来运行了。从android gradle文档看来,您无法为instrumentTest目录创建AndroidManifest,因为它将自动生成。
但是我想知道是否还有另一种方法可以执行此操作而不创建变体,然后指定测试应运行该变体。我也不确定所有这些的确切语法,并认为将这些信息散布在其他人的站点上只是个不错的选择。
最后,如果有人知道一种更好的方法来解决唤醒电话以进行测试的问题,我很想听到它,因为我不是这种尝试的忠实拥护者。
最佳答案
实际上,我想出了一种非常简单的方法来处理此问题。从主 list 中删除键盘保护和唤醒锁权限,然后将它们放入src/debug/AndroidManifest.xml中,如下所示:
src/debug/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
</manifest>
为调试而构建应用程序时,以上权限将合并到主 list 中。默认情况下,构建系统使用调试构建进行仪器测试,因此可以正常工作。
然后在我的onCreate中,放入问题中提到的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (BuildConfig.DEBUG) {
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock keyguardLock = km.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
...
}
现在,我的手机可以运行测试,而无需我先手动唤醒它们,而不必在应用程序的发行版中添加以上权限。
关于android - Android Espresso,测试前唤醒设备。如何使用自定义 list 进行测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19870771/