【发布时间】:2011-08-14 05:58:01
【问题描述】:
我正在寻找自动化测试 Android 应用小部件的方法。因此,测试的一部分显然是将小部件放在主屏幕上。我想出了一个解决方案,但它对我的口味来说有点太老套了,所以我想知道是否有更好的方法。
我的要求是使用外部脚本在模拟器上工作。现在我使用一个简单的 bash 脚本,但我使用的方法也应该适用于 monkeyrunner 脚本:
首先我定义了一个向模拟器发送密钥的函数,就像indicated on SO:
function send() { ( nc -w 2 localhost 5554 <<EOL
event send $*
quit
EOL
) | grep -E -v "OK|KO|Android Console" ; }
和
function send_many() { for i in $* ; do send EV_KEY:$i:1 EV_KEY:$i:0 ; done ; }
send()函数相当于调用MonkeyDevice.send(..., DOWN_AND_UP)。
现在我可以可靠地发送一个键序列打开菜单,选择添加(A键),上两次下一次选择“小部件”,选择我的小部件(它恰好是列表中的第一个) ,等待一两秒钟让小部件配置 UI 显示并在其中选择其安装按钮:
$ send_many KEY_MENU KEY_A KEY_UP KEY_UP KEY_DOWN KEY_ENTER KEY_ENTER
$ sleep 2s
$ send_many KEY_UP KEY_RIGHT KEY_ENTER
最后,我将所有内容封装在一个迭代一堆 AVD 的脚本中(例如,“test_avd_N”,其中 N 是 3..12 的 API 编号),关闭任何正在运行的模拟器,打开一个新模拟器,等待它启动并运行测试脚本。我使用快照准备所有 AVD,并使用 emulator -no-snapshot-save 选项在运行之间保持快照完整。
所以总的来说它有效,但它很不雅观。我想知道我可以在这里改进什么。
【问题讨论】:
标签: android testing automated-tests android-appwidget