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

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。

到此为止我们描述的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)

  1. 4   device.touch(p.x,p.y,MonkeyDevice.DOWN_AND_UP)

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

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

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

老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程的更多相关文章

  1. 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

    老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结   本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...

  2. 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

    老李推荐:第6章7节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-注入按键事件实例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜 ...

  3. 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列

    老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列   事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些 ...

  4. 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

    老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...

  5. 老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件

    老李推荐:第6章5节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-事件   从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有 ...

  6. 老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类

    老李推荐:第6章3节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令翻译类   每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行 ...

  7. 老李推荐:第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串

    老李推荐:第6章2节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-获取命令字串   从上一节的描述可以知道,MonkeyRunner发送给Monkey的命令 ...

  8. 老李推荐:第5章7节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles

    老李推荐:第5章7节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles   poptest是国内唯一一家培养测试开 ...

  9. 老李推荐:第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源

    老李推荐:第5章6节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 初始化事件源   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试 ...

  10. 老李推荐:第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本

    老李推荐:第5章3节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 启动脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

随机推荐

  1. Myeclipse 搭建Java Web 项目:Servlet 《二》

    上一节,我们使用myeclipse部署了web项目,但那部署的为静态的web项目,下面我们来学习编写动态的web项目,编写动态项目必须要用到的为:servlet. Servlet是由sun公司命名的, ...

  2. WP8.1应用双击返回键退出程序。

    #region 双击退出程序代码 //双击HardwareButtons.BackPressed: //出现退出提示窗口: //“确定”退出,“取消”返回什么也不做: private async vo ...

  3. Spring源码解析三:IOC容器的依赖注入

    一般情况下,依赖注入的过程是发生在用户第一次向容器索要Bean是触发的,而触发依赖注入的地方就是BeanFactory的getBean方法. 这里以DefaultListableBeanFactory ...

  4. 前端项目经验总结之js防缓存(避免缓存的影响)

    一.问题描述:打包后的h5项目中有个server.js文件夹,这个文件夹有些时候用户更新了h5,但是加载的还是旧的server.js,所以怀疑是缓存的问题,为了避免缓存的影响所以要给server.js ...

  5. fir.im Weekly - 8 个不能错过的 iOS / Android 技术分享

    本期 fir.im Weekly 收集了 2 月下旬新鲜出炉的 iOS /Android 技术分享.源码等,iOS 中图片技术的解压缩.逆向实战.iOS SDK 实践,Android架构思考.Andr ...

  6. ABP Zero源码

    测试运行地址:http://ghy.demo.aspnetzero.com 账号:admin  密码:123456 需要源码,请加QQ:858-048-581 1.先编译成功,Nuget下载ABP的依 ...

  7. 初级:使用MD5对字符串进行加密操作

    加密技术在企业数据安全中的应用: 大型企业管理软件的应用越来越广泛,企业数据平台涉及局域网.广域网. Internet等,在各类系统中保存的企业关键数据量也越来越大,许多数据需要保存数十年以上,甚至是 ...

  8. Linux CentOS下MySQL的安装配置之浅谈

    前期必备安装:VMware虚拟机,CentOS镜像[注意:Linux下使用CentOS   MySQL是不用在官网下载的,只需要配置就OK了] 下面开始正式操作: //CentOS安装MySQL之浅谈 ...

  9. 2017-3-5 C#基础 函数

    函数/方法:非常抽象独立完成某项功能的一个个体 函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 函数分为: 固定功能函数高度抽象函数 函数四要素:输入,输出,函数体,函数名 p ...

  10. Python基础入门教程(4)(数据类型)

    人生苦短,我学Pyhton Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于199 ...