老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化


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

     1   device = MonkeyRunner.waitForConnection()    

  1. 2   device.wake()  

  2.  


  1. 3   device.startActivity(component="com.example.android.notepad/com.example.android.notepad.NotesList")    

  2.  

  1. 4   viewer = device.getHierarchyViewer()  


  1. 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方法