天地会珠海分舵注:本来这1系列是准备出1本书的,详情请见早前博文“寻求合作火伴编写《深入理解 MonkeyRunner》书籍“。但由于诸多缘由,没有如愿。所以这里把草稿分享出来,所以毛病在所难免。有需要的就参考下吧,转发的话还请保存每篇文章结尾的出处等信息。
上1节我们扼要描写了测试对象NotePad的主要功能模块,那末这1节开始我们就会对每一个模块进行相应的论述,这样读者就算没有真正去安装和玩过这个利用也不会影响大家对本书的浏览理解了。
我们首先看的就是NotesList这个Activity窗口。在你的安卓手机上找到NotePad这个利用的图标以后,就能够点击该图标进入到该Activity了:
? 图2⑵⑴ NotesList Activity窗口
该Activity窗口的的名字我们可以用sdk自带的工具hierarchyviewer来取得,该工具是寄存在你的SDK的tools目录下面的,比如在我的机器上是”/Users/apple/Develop/sdk/tools/hierarchyviewer”。用户可以指定该路径来打开该工具,固然,如果你的环境变量已设置好的话,也能够直接输入”hierarchyviewer”命令来打开。不管你的工作环境是Windows还是Linux还是MAC,其原理是1致的。
这里我们在安卓已打开NotesList这个Activity的时候,在主机端运行hierarchyviewer工具,该工具列出的信息以下:
?图2⑵⑵ hierarchyviewer工具列出的不完全Activity名称
从上图可以看到,在该工具的主界面列出了所有打开的Activity窗口的名字,其中粗体的部份代表是顶层的Activity窗口,也就是说当前在目标安卓机器上看到的窗口。该窗口名字也叫做组件(component),由两个部份组成:斜杠分隔符前面1部份”com.example.android.notepad”是NotePad利用的包名,在目标机器上全局唯1;分隔符后面1部份是Activity的名字,在这里没有显示完全,完全的NotesList的Activity名字应当是”com.example.android.notepad.NotesList”。我们可以把鼠标放到该控件名字里面来让hierarchyviewer把Activity显示完全以下:
图2⑵⑶ hierarchyviewer工具列出的完全Activity名称
在取得NotesList这个Activity的名字主要的目的是在编写MonkeyRunner脚本时可以指定该名字来打开NotePad利用。
NotesList这个窗口由几个部份组成,查看1个窗口的控件信息可以通过另外1个叫做uiautomator的工具来完成。该工具一样是在你的sdk目录下的tools下面可以找到,但需要提1下的是,该工具是在Android 4.1及以后的版本才有的,由于它是随着UiAutomator这个新的UI自动化框架1起出来的。下面我们先列出各个控件的扼要描写:
下面我们先来看下在uiautomator中捕获到的标题控件信息的具体内容:
图2⑵⑷ NotesList标题控件
从上图可以看到NostList标题是1个TextView,uiautomatorviewer中它的文本内容是”Notes”;resource-id是”android:id/title”,MonkeyRunner可以通过该id定位到该标题控件;bounds属性表示该控件的边界范围,由左上角的绝对坐标和右下角的绝对坐标进行定义(但系统选项菜单会不1样,我们第4小节会进行描写)。我们可以通过该边界决定MonkeyRunner摹拟点击该控件时的有效位置,1般做法是取各个坐标边界的中间值,比如上面的左上角x坐标6加上右下角x坐标474再除以2就是我们点击的x坐标240;左上角6坐标39加上右下角y坐标74再除以2就是我们点击的y坐标56,所以终究的点击坐标就应当是[240,56]。
固然该控件还有很多其他信息,但由于MonkeyRunner都用不上,所以就不逐一罗列了。
下面我们继续去看1下NotesList这个窗口中的另外1个控件-日记内容列表ListView的内容:
图2⑵⑸ NotesList日记列表ListView
由于当前还没有增加任何日记,所有该控件显示的是1个空列表。我们增加两个日记后,日记列表内容将以下所示:
图2⑵⑹ NotesList日记
上图左侧显示新增加日记的标题,右侧是uiautomatorviewer所显示的该日记的属性,可以看到每一个日记是1个TextView类型的控件,而这些日记的父控件就是日记类容列表ListView控件。
作者:天地会珠海分舵
微信公众号:TechGoGoGo
微博:http://weibo.com/techgogogo
CSDN:http://blog.csdn.net/zhubaitian