我正在寻找自动化测试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)。
现在我可以可靠地发送一个按键序列来打开菜单,选择Add (A键),向上两次,向下一次选择" widget ",选择我的widget (恰好是列表中的第一个),等待一到两秒,等待widget配置界面出现,并在其中选择它的安装按钮:
$ 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最后,我将所有这些都封装在一个脚本中,该脚本迭代一组and (例如,"test_avd_N“,其中N是来自3..12的API编号),关闭任何正在运行的仿真器,打开一个新的仿真器,等待它启动并运行测试脚本。我使用快照准备所有的AVD,并使用emulator -no-snapshot-save选项在两次运行之间保持快照的完整性。
因此,总的来说,它是有效的,但它相当难看。我想知道我还能改进什么。
发布于 2011-08-14 14:13:17
使用MonkeyRunner脚本至少可以消除该send函数的笨拙。在你的按键顺序中,一个明显的问题是使用'A‘作为从Home菜单添加的快捷键。如果模拟的设备使用不同的语言,这将不起作用,您肯定会在某个时候进行测试。
说到这一点,从API9或10开始,模拟器上有一个经过修改的CustomLocale.apk,您可以使用它通过广播来更改语言环境:
$ LOCALES=( $( aapt dump configurations "$APK "| sed -e 's/^.*lang=\(..\).*reg=\(..\).*/\1_\2/;s/_--//;s/--//' ) )
$ for LC in ${LOCALES[@]}; do
> adb -e shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE $LC
> done要检查您的仿真器是否支持此功能,请检查CustomLocale apk的包名中是否包含v2:
$ adb shell pm list packages | grep customlocalehttps://stackoverflow.com/questions/7055310
复制相似问题