如何在仪器测试中将关键事件发送到无头模拟器?

Mat*_*ias 8 testing build-automation instrumentation android emulation

我们目前正在开发一个在我们的构建服务器上运行的检测测试套件,但是当测试使用普通的Android模拟器传递开发机器时,构建服务器上的构建失败,因为我们只运行带有-no-window标志的无头模拟器.

尝试调用InstrumentationTestCase.sendKeys()方法以编程方式打开选项菜单时发生故障.错误是:

权限被拒绝:从pid 646 uid 10026注入关键事件到uid 1000拥有的窗口{43d55100 paused = false}

然后我们发现有一个INJECT_EVENTS权限,但在清单中设置它没有任何效果.实际上在日志中我们看到了这个输出:

不授予android.permission.INJECT_EVENTS权限以包com.qype.radar(protectionLevel = 2 flags = 0x6644)

这是否意味着此权限无用?

我们还尝试让测试测试应用程序和被测试的应用程序共享相同的Linux用户ID android:sharedUserId并在同一个进程中运行(android:process- 我们不确定是否已经是这种情况),但仍然没有运气.

这是否意味着目前无法在无头模拟器上运行包含关键事件的仪器,或者我们是否遗漏了某些内容?

Chr*_*Orr 17

-no-window通过首先运行Xvnc实例(即伪X服务器)然后启动模拟器,在没有无头机器的情况下运行模拟器DISPLAY.

更准确地说,我得到了XvncAndroid Emulator Jenkins插件来为我做这个.

不幸的是,在注入UI事件之前解锁屏幕仍然是一个问题,但这是通过自动运行这样的命令(hackily)来解决的(类似于你见过的其他答案):
echo "event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0" | nc -q1 localhost 5554


编辑:
我发现这种方法更可靠:
adb shell input keyevent 82

有关键码82的一些信息.


小智 1

我在 Hudson 服务器上进行测试时遇到了类似的问题。就我而言,我通过Android SDK的建议解决了问题: http://developer.android.com/guide/topics/testing/testing_android.html#UITestTroubleshooting

重要的是我也必须为主应用程序启用权限。

  • 解决办法是什么?该部分已从该页面删除:( (3认同)