起因
  今年年初的时候,公司让写个做自动化测试的工具,真头疼!我都没做过这,心里怕怕的,但交待我来做,我又不能不接,罢了,做!
  因为没做过,我只学过些java,都毕业三四年了,哪记得那多,想着用python做,听说python容易上手,找了本python做GUI的书,全英文的,看了一遍,云里雾里的,没概念。思考再三,还是用java做,毕竟还有点基础不是,找了好几本用java做GUI的书,后还是选中--《Java开发利器:Eclipse SWT/Jface核心应用》,这本书比较详细,靠谱。
  怎么做
  这个工具点坐标可以了吗?NO,要点控件,此前已经自学过uiautomator,也写过许多shell做自动化测试的脚本(Shell+sendevent),所以我考虑将uiautomator与shell结合起来做,写出来的测试脚本是一个个的shell脚本,用java做电脑端编写自动化测试脚本的工具。点击控件,我所想到的实现方法有两种:
  一种是:
  通过uiautomator,通过传递参数到uiautomator脚本,将一些通用的方法,写出来,供shell来调用,比如我们可以在eclipse中,写一个ClickByText方法,然后在shell中调用,uiautomator runtest FileName.jar -c PackageName.ClassName -e text Phone,来点击text属性为Phone的控件。

  另一种是
  通过uiautomator dump生成xml文件,通过shell分析这个xml档,方法可见:[https://testerhome.com/topics/2806]
  所以,写出来的测试脚本,是shell脚本,我写了一个Template.sh,这里面包含所有的通用操作,比如Click,ClickByText,PinchIn等等,其他的测试用例,都去调用这里面的方法。当然,不仅仅包含这些按键的方法,还包含测试设备状态的一些方法,比如抓取某一进程memory(使用procrank命令)使用的大小保存到一xls表格中,等

  可以点击控件,但是不能在本工具查看控件,控件查看需要通过uiautomatorviewer这个工具,被同仁反?,不方便,虽然自我感觉还行啊!我在eclipse中用uiautomator写测试用例的时候,也是要看uiautomatorviewer的控件啊,习惯了,所以不觉得有什么问题。没有用过的同仁觉得,呀,你为什么不能把uiautomatorviewer上面显示的控件信息,显示到你的工具上去呢,那样多好。
  优点
  对比uiautomator,我这还有一优点呢,选中一行,单击debug即可单步调试,而在eclipse中用uiautomator写测试用例时,则需要编译,push,后才可执行
  缺点
  因为测试用例都是Shell脚本,所以可以在后台跑,但是不能进sleep模式,进sleep模式,shell会被挂起,直到唤醒后继续run
  后来
  后来,我在testerhome看到了 @cpfeng0124的帖子[https://testerhome.com/topics/2632] ,这与我的想法刚好相反,我想在我的工具上加入uiautomatorviewer显示控件的信息,而这个贴子则是在uiautomatorviewer的基础上,加入了各种操作。但我没有找到uiautomatorviewer的源码,在群里一位叫文武不辉的同学的帮助下,找到了uiautomatorviewer的源码,然后我又基于uiautomatorviewer的源码,做了一新工具:

  在开发过程中,一同事用,各种bug,被她各种吐槽,各种不爽,唉,不过还好,虽然做的慢,但还是做出来了。
  碰到的一些问题(问题非常多,挑一两个主要的讲吧)
  如何在点击控件时,自动获取控件的instance信息?
  开始我默认是点击instance为1的控件,后台在开会时,同事问我,是否可以自动抓到第几个控件,比如在上图中,我们看到当前选中的是第三个text属性为Phone的控件,工具会在选择Attribution operation > Click > text之后,自动点击text属性为Phone的第三个控件,并刷新点击操作后的屏幕与控件信息到工具上来,我在uiautomatorviewer的源码uiautomatorviewer.java中加入了一列,用来显示text,resource-id及content-desc是第几个,这里是判断text属性是第几个控件的代码

  在使用uiautomator dump过程中发现,有时会发生uiaumator进程死锁,导致我的测试脚本卡死,不再继续执行,这里我通过shell判断,如果2秒钟后,进程仍在,将它杀掉:

  感谢
  首先,得感谢,让你先痛苦的人,是公司的上司吧,如果不是他,我也不打算做这工具,其他公司另一部门有一自动化工具,这个不细说了。然后要感谢TesterHome让我从不同的大牛的帖子中学到了许多知识与想法,感谢我那一直吐槽我的同事,催我改进工具啊!
  未来
  这个工具,还可以继续优化,编辑区域可以优化,做成shell脚本代码高亮,伸缩显示等效果,可以将ddms的部分功能移植过来,等等
  接下来的学习计划
  在学习uiautomator2.0,同时想学一下espresso,以及html+css+javascript,用来做漂亮点的自动化测试报告。