Android手机不像iPhone,六年了只出了六款手机,分辨率只有三种。Android系统的开源注定了Android手机的差异化,众多分辨率给自动化测试带来了很大的麻烦,通过坐标定位写出来的脚本通用性很低,那么有没有其他的定位方法呢?有!monkeyrunner自带一个package叫easy,这个package中包含两个类:By和EasyMonkeyDevice,通过这两个类可以使用id进行控件的定位,比坐标通用性强,且更加方便。
在介绍By和EasyMonkeyDevice之前,先介绍一个实用工具——Hierarchy Viewer。在monkeyrunner.bat同一个目录下有个hierarchyviewer.bat,双击或者在cmd窗口输入hierarchyviewer都能启动。通过该工具可以很方便地查看界面上的控件,可以看到控件的很多信息,包括id、Height、Width等等,比从代码找id方便得多。不过很悲催的就是量产机无法使用该工具,主要是Google出于安全考虑,只对开发者ROM开放此功能。工具使用很简单,就不多说了(本来想贴两张图的,显示不了,算了,哎)。
看了By和EasyMonkeyDevice的源代码,发现都有个“import com.android.chimpchat.hierarchyviewer.HierarchyViewer;”,所以量产机是没办法使用这两个类的,我也不得不将Motorola XT889换成公司的工程机HTC T528d了。这里依然以天翼空间为例,接着上一篇博文介绍。
1、导入模块:输入from com.android.monkeyrunner.easy import EasyMonkeyDevice,By,导入同一个包中的多个类,类之间用逗号隔开;
2、获取EasyMonkeyDevice对象:输入eT528d=EasyMonkeyDevice(T528d),T528d为MonkeyDevice对象;
3、获取By对象:输入DisagreeButton=By.id("id/btn_disagree"),获取天翼空间登录界面的“不同意”按钮,按钮id为“id/btn_disagree”;
4、通过id点击控件:输入eT528d.touch(DisagreeButton,T528d.DOWN_AND_UP),点击“不同意”按钮,即退出天翼空间。
以上3、4步一般合并使用,即写成:eT528d.touch(By.id("id/btn_disagree"),T528d.DOWN_AND_UP)。完整代码如下:
from com.android.monkeyrunner import MonkeyRunner as MR
from com.android.monkeyrunner import MonkeyDevice as MD
from com.android.monkeyrunner import MonkeyImage as MI
from com.android.monkeyrunner.easy import EasyMonkeyDevice,By
T528d=MR.waitForConnection(10)
if T528d:
print("Connect device successful!")
else:
print("Connect device failed!")
eT528d=EasyMonkeyDevice(T528d)
T528d.installPackage("D:\\MonkeyRunnerDemo\\Apps\\estore.apk")
T528d.startActivity(component="com.eshore.ezone/.StartActivity")
MR.sleep(3)
eT528d.touch(By.id("id/btn_disagree"),T528d.DOWN_AND_UP)
EasyMonkeyDevice类里面还有很多方法,包括exists(By)、getText(By)、type(By,String)、visible(By)等等,用法自己去发掘,后续博文会写一些比较长的脚本,会用到很多我这里没讲到的方法和属性供大家参考。