gpt4 book ai didi

android - 如何在主屏幕上自动测试小部件?

转载 作者:行者123 更新时间:2023-11-28 20:21:09 25 4
gpt4 key购买 nike

我正在寻找自动测试 Android 应用小部件的方法。因此,部分测试显然是将小部件放在主屏幕上。我想出了一个解决方案,但它对我来说有点太老套了,所以我想知道是否有更好的方法。

我的要求是使用外部脚本在模拟器上运行。现在我使用一个简单的 bash 脚本,但我使用的方法也应该适用于 monkeyrunner 脚本:

首先,我定义了一个函数来将 key 发送到模拟器,因为已经是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键),向上两次向下一次选择“Widget”,选择我的小部件(它恰好是列表中的第一个) ,等待一两秒钟,让小部件配置 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 选项在运行之间保持快照完整。

总的来说它是有效的,但它很不雅观。我想知道我可以在这里改进什么。

最佳答案

使用 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

关于android - 如何在主屏幕上自动测试小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055310/

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