Adb-for-test分python和java版本,github地址:https://github.com/gb112211/Adb-For-Test
定位元素方式也是使用dump当前activity树结构:
元素获取就是通过解析dump文件内容查找元素,可能速度上比appium快很多。
当然可以使用他这个工具完成部分与appium基本相同的功能。
我使用他这个工具,实现了自定义几个Activity界面内的monkey测试:
1.因为monkey测试的随机无序性,导致可能部分界面可能永远都无法进入,或者几率很小,所以要实现有些界面内是否稳定,要自定义几个界面内的测试。
2.由于公司使用插件化要跑几个插件包,自定义界面内monkey测试也是很必须的,还有集成测试时插件之间的稳定性也是必要的。
3.可能会找到一些ui问题,兼容问题等,所以要进行自定义monkey测试。
配置项:
目前想到的配置项是写在一个json结构体内的:
PackageName表示你要测试的包名是什么。
PackageActivity表示你要启动的Activity是什么。
WhiteList表示你要自定义Monkey测试哪些Activity界面。
BlackList表示哪些Activity界面你不想要进行测试,当然可以不写。
TestMain表示你要进入某个页面的名字,然后我会在解析json时判断名字然后执行操作步骤进入这个界面。
执行操作:
1.循环读取当前activity,获取activity我自己写了一个方法:
先查看当前包名的activity是否存在,如果为空,则表示不存在:
首先杀掉应用。(如果应用程序被置于后台后,也是会先杀掉应用,暂时还不知道怎么利用adb将后台应用启动的方法,后期研究,或者大家有知道的可以告诉我)。然后再启动Activity。
2.将设置好的whiteList和blackList与当前的获取的Activity进行对比。
3.如果判断当前界面Activity不在whiteList中直接执行返回操作,每次都会执行返回操作,直到存在则进行monkey操作。
4.执行monkey操作过程:
使用随机数,根据随机数进行不同的操作:
5.自定义进入界面:
每次启动应用之后都会进入某个界面,根据testMain定义的名字,传给runByModuleName处理:
根据名字执行不同的操作进入某个页面。
大致简单的实现的monkey测试。所有操作都是使用adb-for-test框架提供的封装好的adb命令实现的。可能在实际操作过程会出现某个页面弹出浮层对话框,现在我是通过判断界面是否存在然后进行点击,如下示例:
改进点:
1.正如上边说的:如果应用程序被置于后台后,我会杀掉应用,然而可能会有一些问题,假如用户那一刻后台又启动了它,正好崩溃,那这种情况可能就没有考虑到了,后期优化。
2.自定义进入某个页面,我是写好了json,后期可能公司其他业务测试可能也会用这个工具,runByModuleName下就应该变成各业务线人员可以很方便的添加自己的脚本,后期想想有什么好办法。
3.根据自动遍历工具思路,设计出适合自己的自动测试内容。自动遍历工具:https://testerhome.com/topics/4645
解决小米等手机安装应用弹出框等问题。
使用adb-for-test工具进一步优化了小米系手机adb shell input text内容时,假如你当前手机输入法是其他输入法并且是中文输入法下,然后可能输入不上内容的问题。如下:
解决方法是安装appium自带的输入法apk包,可以在F:\Appium\AppiumForWindows-1.2.0.1\node_modules\appium\build\unicode_ime_apk这里找到。
1.具体步骤:
(1)查看appium输入法是否在系统输入法中。
通过命令:adb shell ime list -s|findstr io.appium.android.ime/.UnicodeIME 查看
(2)再查看应用apk是否安装。有时候通过以上命令并不能查看到,但是确实是已经安装了应用程序,这是因为小米手机权限问题,可以进入输入法界面查看到:
默认如果安装了apk在输入法设置界面并未勾选上,这应该就是通过上面命令无法查看到的原因了。查看应用是否已经安装了:adb shell pm list package|findstr io.appium.android.ime
(3)如果上面两步中都未取到值,则就要安装appium的输入法了。
使用上边代码在安装的时候就会弹出是否继续安装的弹出框啦:
然后通过框架带的查找控件方法查找继续安装按钮,并定位,然后点击它:
(4)最后切换为appium的输入法:
Adb shell ime set io.appium.android.ime/.UnicodeIME