打造专属uiautomatorviewer

打造专属uiautomatorviewer,先看下成果展示:
打造专属uiautomatorviewer
打造专属uiautomatorviewer
打造专属uiautomatorviewer

看了testerhome网站《由 uiautomator 二次开发得到的启发以及完善》https://testerhome.com/topics/3048 ,感概真是相当棒的idea。感到不足的地方是生成的脚本为啥不弄个可视化的界面展示出来,而且没有细化到获取选中的控件的id,text,content-desc和class去生成相对应的脚本,如果在右键菜单进行一些操作后刷新界面,那就更棒了!
带着这个思路,我决定去学习uiautomatorviewer的源码,并决定打造属于自己的uiautomatorviewer,定了开发目标:

1.桌面端uiautomatorviewer获取界面,在界面加入简单操作并反馈至手机,部分操作亦刷新viewer界面,减少手动操作手机次数。
2.操作过程结合获取的元素生成简单自动化脚本,帮助提高书写代码的效率。

在工作之余大概花了4天的时间学习和开发完成,开发中途,周五大概完成了80%,拿给了斌辉和温力同学看看,斌辉和温力同学都提出了相同的一个问题:控件的id或text或content-desc或class相同,能不能区分选中的控件是第几个?就是控件的instance问题,uiautomatorviewer没有instance属性只有index属性。真是英雄所见略同,于是周末又花了半天的时间去研究下多叉树的遍历并开发出了获取instance,自己的思路大体是这样的:

层次遍历多叉树,到选中的节点处截止,在这些遍历到的节点中,如果这些节点包含选中节点的某一属性(id或text或content-desc或class),则instance + 1。

本来这个思路挺好的,可是开发遍历过程中写的函数给我返回的这些节点只有父节点,调了好久没成功,于是改变思路分两步走:

1.遍历整个界面所有节点,保存起来。
2.在所有节点中找出选中节点的前面的节点,如果这些节点包含选中节点的某一属性(id或text或content- desc或class),则instance + 1。

开发准备:
1.uiautomatorviewer源码
2.swt开发http://www.cnblogs.com/xing901022/p/4098368.html
3.度娘

大概弄清楚uiautomatorviewer的原理后,进行改写uiautomatorviewer,实施方案:

1.主窗口类UiAutomatorViewer,改写为单例模式,添加获取root节点和当前节点的私有变量 UiAutomatorModel uModel,在回调函数setModel对uModel赋值,我当时这样想这样做的目的是无论我在哪个类下我都能刷新viewer和获取当前root节点和选中节点。

打造专属uiautomatorviewer
主窗口类

打造专属uiautomatorviewer
改为单例模式,添加私有变量 uModel

打造专属uiautomatorviewer
回调函数赋值uModel

2.swt的控件主要在UiAutomatorView扩展,请看swt开发或问度娘,大体扩展如下
打造专属uiautomatorviewer

3.遍历整个界面多叉树,在BasicTreeNode扩写,本来我写了第一个思路的函数老调试不成功,改写成第二个思路,请看代码,如果你有优化方案请告诉我。
打造专属uiautomatorviewer

遍历完后:
打造专属uiautomatorviewer

,

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除