android自动化框架 MonkeyRunner,UiAutomator,Robotium,Appium
MonkeyRunner:
首先MonkeyRunner 使用jython语言,在命令行中使用时会出现中文乱码,需要调整chcp
不支持多点触碰
脚本书写、执行、调试方便,但是socket连接不稳定(原因在于PC的usb接口提供的电压不稳,怎么解决?能用台式机别用笔记本,能用主机后面的usb端口别用前面的,电脑使用时间长了换电容换电源),需要自己修改框架才能稳定使用。
而且无法自动处理物理断连。
谷歌对于MonkeyRunning的维护在多年前已经停止
使用Socket连接从PC向设备发送命令,此时以shell用户(大概)的身份得到注入事件的权限
MonkeyRunner通过ViewServer获取UI控件,在真机上基本上都是无法开启ViewServer的。
需要修改源码后刷ROM或者替换ROM中的某个文件才能开启ViewServer。
或者使用Xposed等进行动态注入。
开启ViewServer可以获取到输入法键盘,但也不是万能的,不支持网页操作,部分输入法dialogwindow取不到,而且viewserver需要手动启动的
但是会比较经常地出现失灵的情况,此时需要关闭viewserver再重新开启。(也可能是因为 替换ROM中的文件 这种方法存在隐患 或者 是我替换的那个手机的问题)
MonkeyRunner资料比较多,但是有价值的不多。
UiAutomator:
要求4.2以上,实际上可能需要4.3,因为4.2比4.3少了一些方法
无法获取网页信息
无法获取动态地页面信息(必须等待页面停止刷新后才能获取)
无法获取输入法键盘信息
除了通过判断页面上存在的控件的方法以外无法判断页面状态,无法判断应用崩溃,如果其他后台的应用弹窗无法处理。无法判断是否有弹窗
最好把这些会弹窗的应用全删了。或者自己写个应用在后台用service监控,有哪些应用弹窗了,或者用service通过写文件的方式(数据库ContentProvider等 uiautomator好像没法直接操作)
因为无法判断当前的焦点activity所在(相关方法返回值是错误的),只能判断当前最前台的包名。
支持多点触控,多点滑动操作,但是必须在4.3以上,而且ADK中提供的Uiautomator包中的函数并不正确,需要自己重新编译一个Uiautomator包或者使用反射。
所有操作都有返回值,但是返回值本身并没有参考意义。操作成功也可能返回false,操作失败也会返回true。
需要连接PC执行,在PC命令行输出执行信息
对动态界面无力
UiAutomator2.0:
UiAutomator可以通过Instrumentation来启动。
Espresso类似于Robotium,并且更优秀
支持网页测试
对动态界面无力
Robotium:
支持网页操作
壁纸应用未知(launcher)
多点触控的支持未知
框架无法跨进程
跨进程的操作需要自己实现
需要权限的操作需要在测试的app中添加权限
需要签名
对动态界面无力
ROM相关cts测试
其实可以在windows上执行