第14章1节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

时间:2023-03-08 17:42:06
第14章1节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

到此为止我们描写叙述的MonkeyRunner相应用的点击拖放等操作都是直接通过指定坐标点来实现的。比方以下触摸一个坐标点为(60,90)的按钮的脚本样例:

1	device.touch(60,900,MonkeyDevice.DOWN_AND_UP)

代码14-1-1 直接使用坐标点操作应用

  这样子做的话代码会存在以下几大缺点:

  • 缺乏易用性:要操作某个控件之前须要先想办法如通过工具来定位该控件的坐标点
  • 可扩展性差:当屏幕分辨率改变的时候须要另外写一个通用算法来处理坐标点的变化
  • 可读性差:代码到处都是坐标点的x,y值。让人看得头痛。这就好比用惯了java的程序猿去看汇编代码一样
  • 可复用性差:当屏幕分辨率改变的时候假设不提供一个通用算法来自己主动计算新坐标点的话。就须要依据不同的分辨率提供不同的x。y坐标来进行測试

既然直接用坐标点存在这么多缺点,那么有没有更好的方法来消除这些问题呢?答案是肯定的,本章描写叙述的HierarchyViewer就是专门解决这些问题的。当用户须要操作一个控件的时候,不再是直接通过坐标点来进行定位。而是能够通过控件id先获得控件。然后再通过控件的坐标属性进行定位。在这个过程中用户并不须要知道该控件的坐标值是多少。由于它是封装在控件的属性里面的,是从目标安卓设备端实时得到的。所以就算换了測试机器,屏幕分辨率改了也没有影响,代码继续能够执行。

上面的实例中假如button的id是”id/button”,那么通过获取控件的方式点击按钮的脚本代码将会相似例如以下:

1	viewer = device.getHierarchyViewer()
2 view = viewer.findViewById("id/button")
3 p = viewer.getAbsoluteCenterOfView(view)
4 device.touch(p.x,p.y,MonkeyDevice.DOWN_AND_UP)

代码14-1-2 通过控件操作应用

能够看到用户根本不须要关心屏幕分辨率变化导致的控件坐标的变化。所以能够说HierarchyViewer让MonkeyRunner看上去更接近是面向控件的ui自己主动化測试框架。

当然,HierarchyViewer除了提供依据id定位一个控件的功能之外。还提供其它的一些功能,比方依据控件id获得控件的Text属性等,这些我们往下都会分析到。

注:很多其它文章请关注公众号:techgogogo或个人博客http://techgogogo.com。当然。也很欢迎您直接微信(zhubaitian1)勾搭。本文由天地会珠海分舵原创。转载请自觉,是否投诉维权看心情。