gpt4 book ai didi

Android Espresso,测试前唤醒设备。如何使用自定义 list 进行测试?

转载 作者:IT老高 更新时间:2023-10-28 23:03:57 27 4
gpt4 key购买 nike

我一直在用 androids 的新 espresso 框架编写测试,发现它运行良好。一件烦人的事情(不是 Espresso 特有的)是我必须确保我的屏幕处于唤醒状态并解锁才能运行测试。我找到了一种解决方法(通过各种来源),但我不确定集成它的最佳方法。

这就是我所做的,在我的“主页” Activity 中,我有以下代码:

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 list 的不同“ flavor ”,这些 list 将合并到主 list 中。我正在考虑使用它,但我不想仅仅因为这个原因添加 flavor ,因为它已经在使用测试构建类型来运行。从 android gradle 文档看来,您无法为 instrumentTest 目录创建 AndroidManifest,因为它将自动生成。

但是我想知道是否有另一种方法可以在不创建变体的情况下执行此操作,然后指定测试应该运行该变体。此外,我不确定所有这些的确切语法,并认为将这些信息放在网站上以供其他人使用会很好,因为它似乎分散在各处。

最后,如果有人知道解决唤醒电话以进行测试的问题的更好方法,我很乐意听到它,因为我不喜欢我正在尝试的这种方式。

最佳答案

我实际上想出了一个非常简单的方法来处理这个问题。从主 list 中删除 keyguard 和唤醒锁权限,并将它们放在 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 Espresso,测试前唤醒设备。如何使用自定义 list 进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com