既然要使用HierarchyViewer来获取控件信息,那么首先我们看下在脚本中。我们是怎么获得HierarchyViewer的,看以下一段脚本代码:

1	device = MonkeyRunner.waitForConnection()
2 device.wake()
3 device.startActivity(component="com.example.android.notepad/com.example.android.notepad.NotesList")
4 viewer = device.getHierarchyViewer()
5 view = viewer.findViewById("id/button")

代码14-3-1 測试脚本获取HierarchyViewer演示样例

从代码中我们能够看到其调用的是MonkeyDevice的getHierarchyViewer方法。跟踪进去:

 67     @MonkeyRunnerExported(doc = "Get the HierarchyViewer object for the device.",
68 returns = "A HierarchyViewer object")
69 public HierarchyViewer getHierarchyViewer(PyObject[] args, String[] kws) {
70 return impl.getHierarchyViewer();
71 }

代码14-3-2 MonkeyDevice - getHierarchyViewer方法

通过本书之前的分析,我们知道MonkeyDevice的成员变量impl其实就是AdbChimpDevice的一个实例,所以往下调用的是AdbChimpDevice的getHierarchyViewer方法:

 82     public HierarchyViewer getHierarchyViewer() {
83 return new HierarchyViewer(device);
84 }

代码14-3-3 AdbChimpDevice的getHierarchyViewer方法

AdbChimpDevice会直接调用HierarchyViewer的构造函数对HierarchyViewer进行实例化。

实例化会传入AdbChimpDevice的成员变量device,那么这个device又是哪个类的实例呢?从前面的分析中我们知道。这其实是ddmlib库里面的Device这个类的实例,它基本的作用是调用AdbHelper来往ADBserver发送命令。

好,我们继续看下HierarchyViwer的构造函数:

 30     /**
31 * Constructs the hierarchy viewer for the specified device.
32 *
33 * @param device The Android device to connect to.
34 */
35 public HierarchyViewer(IDevice device) {
36 this.mDevice = device;
37 setupViewServer();
38 }

代码14-3-4 HierarchyViewer构造函数

这里HierarchyViewer把ddmlib库的Device实例保存为自己的成员变量以便往后利用它来往ADB发送命令。然后会调用setupViewServer这个成员函数来把ViewServer准备好,下一小节我们会去分析下这种方法。

注:很多其它文章请关注公众号:techgogogo或个人博客http://techgogogo.com。当然,也很欢迎您直接微信(zhubaitian1)勾搭。

本文由天地会珠海分舵原创。

转载请自觉,是否投诉维权看心情。

最新文章

  1. angularjs指令参数transclude
  2. phpexcel导入数据提示失败
  3. validate插件深入学习-04自定义验证方法
  4. net-snmp子代理(SubAgent)编写详述
  5. Pyqt Smtplib实现Qthread多线程发送邮件
  6. windows本地自动集成代码+SSH服务器配置
  7. 如何清除朗逸保养提示标志INSP
  8. chenxi的html学习笔记
  9. 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
  10. Android IOS WebRTC 音视频开发总结(二十)-- 自由职业
  11. c++中的virtual函数,即虚函数
  12. python的元组和列表使用之一
  13. JS获取按下的键盘字符
  14. 去除input在谷歌下的focus效果
  15. SqlParameter参数化查询
  16. System.Text.RegularExpressions.Regex
  17. wireshark过滤规则
  18. .Net语言 APP开发平台——Smobiler学习日志:获取或存储图像路径设置
  19. Clion设置字体大小和护眼色
  20. Linux localtime_r调用的一个小问题

热门文章

  1. 基于CGAL的Delaunay三角网应用
  2. 取消VS2017窗口置顶
  3. 前端编码规范(2)HTML 规范
  4. python--5、包
  5. Android测试写入文本Log
  6. 迭代器与index遍历
  7. js 检查内容是否为空
  8. windows10上安装mysql详细图文教程
  9. python学习之小小爬虫
  10. eas之如何获取当前用户