【问题标题】:How to automatically test Widgets on Home screen?如何在主屏幕上自动测试小部件?
【发布时间】: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


    【解决方案1】:

    使用 MonkeyRunner 脚本至少可以消除 send 函数的笨拙。 按键序列中的一个明显问题是使用“A”作为从主菜单添加的快捷方式。如果模拟设备使用不同的语言(您必须在某个时候进行测试),这将不起作用。

    说到这一点,从 API 9 或 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 customlocale
    

    【讨论】:

      猜你喜欢
      • 2011-03-22
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多