老李推荐:第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介

 

NotePad窗口Activity之NotesList简介


上一节我们简要描述了测试对象NotePad的主要功能模块,那么这一节开始我们就会对每个模块进行相应的阐述,这样读者就算没有真正去安装和玩过这个应用也不会影响大家对本书的阅读理解了。

我们首先看的就是NotesList这个Activity窗口。在你的安卓手机上找到NotePad这个应用的图标之后,就可以点击该图标进入到该Activity了:

该Activity窗口的的名字我们可以用sdk自带的工具hierarchyviewer来获得,该工具是存放在你的SDK的tools目录下面的,比如在我的机器上是”/Users/apple/Develop/sdk/tools/hierarchyviewer”。用户可以指定该路径来打开该工具,当然,如果你的环境变量已经设置好的话,也可以直接输入”hierarchyviewer”命令来打开。无论你的工作环境是Windows还是Linux还是MAC,其原理是一致的。

这里我们在安卓已经打开NotesList这个Activity的时候,在主机端运行hierarchyviewer工具,该工具列出的信息如下:

从上图可以看到,在该工具的主界面列出了所有打开的Activity窗口的名字,其中粗体的部分代表是顶层的Activity窗口,也就是说当前在目标安卓机器上看到的窗口。该窗口名字也叫做组件(component),由两个部分组成:斜杠分隔符前面一部分”com.example.android.notepad”是NotePad应用的包名,在目标机器上全局唯一;分隔符后面一部分是Activity的名字,在这里没有显示完整,完整的NotesList的Activity名字应该是”com.example.android.notepad.NotesList”。我们可以把鼠标放到该控件名字里面来让hierarchyviewer把Activity显示完整如下:

在获得NotesList这个Activity的名字主要的目的是在编写MonkeyRunner脚本时可以指定该名字来打开NotePad应用。

NotesList这个窗口由几个部分组成,查看一个窗口的控件信息可以通过另外一个叫做uiautomator的工具来完成。该工具同样是在你的sdk目录下的tools下面可以找到,但需要提一下的是,该工具是在Android 4.1及之后的版本才有的,因为它是随着UiAutomator这个新的UI自动化框架一起出来的。下面我们先列出各个控件的简要描述:

  • 标题: NotesList界面中所有日记共享同一个标题,该标题是一个文本TextView控件
  • 日记列表: 所有的日记都会在日记列表这个ListView控件中进行显示

下面我们先来看下在uiautomator中捕获到的标题控件信息的具体内容:

从上图可以看到NostList标题是一个TextView,uiautomatorviewer中它的文本内容是”Notes”;resource-id是”android:id/title”,MonkeyRunner可以通过该id定位到该标题控件;bounds属性表示该控件的边界范围,由左上角的绝对坐标和右下角的绝对坐标进行定义(但系统选项菜单会不一样,我们第4小节会进行描述)。我们可以通过该边界决定MonkeyRunner模拟点击该控件时的有效位置,一般做法是取各个坐标边界的中间值,比如上面的左上角x坐标6加上右下角x坐标474再除以2就是我们点击的x坐标240;左上角6坐标39加上右下角y坐标74再除以2就是我们点击的y坐标56,所以最终的点击坐标就应该是[240,56]。

当然该控件还有很多其他信息,但因为MonkeyRunner都用不上,所以就不一一列举了。

下面我们继续去看一下NotesList这个窗口中的另外一个控件-日记内容列表ListView的内容:

因为当前还没有增加任何日记,所有该控件显示的是一个空列表。我们增加两个日记后,日记列表内容将如下所示:

上图左边显示新增加日记的标题,右边是uiautomatorviewer所显示的该日记的属性,可以看到每个日记是一个TextView类型的控件,而这些日记的父控件就是日记类容列表ListView控件。

老李推荐:第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介的更多相关文章

  1. 老李推荐:第2章4节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之菜单简介

    老李推荐:第2章4节<MonkeyRunner源码剖析>了解你的测试对象: NotePad窗口Activity之菜单简介   NotePad窗口Activity之菜单简介 这里我们总共用到 ...

  2. 老李推荐:第2章3节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NoteEditor简介

    老李推荐:第2章3节<MonkeyRunner源码剖析>了解你的测试对象: NotePad窗口Activity之NoteEditor简介   我们在增加和编辑一个日记的时候会从NotesL ...

  3. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  4. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

  5. 老李推荐:第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

    老李推荐:第14章6节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-启动ViewServer   poptest是国内唯一一家培养 ...

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

    老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...

  7. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

  8. 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

    老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程   poptest是国内唯一一家培养测试开发工程师的培训机 ...

  9. 老李推荐:第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

    老李推荐:第8章7节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-小结   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性 ...

随机推荐

  1. Spark源码分析之Spark-submit和Spark-class

    有了前面spark-shell的经验,看这两个脚本就容易多啦.前面总结的Spark-shell的分析可以参考: Spark源码分析之Spark Shell(上) Spark源码分析之Spark She ...

  2. 在SQL Server里如何处理死锁

    在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL ...

  3. ShiWangMeSDK Android版接口文档 0.2.0 版

    # ShiWangMeSDK Android版接口文档 0.2.0 版 android 总共有 14 个接口,分别涉及到初始化和对界面的一些细节的控制.下面详细介绍接口,如果没有特殊说明,接口都在 S ...

  4. Ionicons的使用

    安装 参考Ionicons npm install react-native-vector-icons --save 这时候可能会报错:npm WARN deprcated lodash@4.2.0: ...

  5. 【Unity优化】我所理解的IL指令

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 指令格式 英文单词全写 指令解释 nop no operation perform ...

  6. 在Vue中通过自定义指令获取元素

    vue.js 是数据绑定的框架,大部分情况下我们都不需要直接操作 DOM Element,但在某些时候,我们还是有获取DOM Element的需求的: 在 vue.js 中,获取某个DOM Eleme ...

  7. tp框架知识 之(链接数据库和操作数据)

    框架有时会用到数据库的内容,在"ThinkPhp框架知识"的那篇随笔中提到过,现在这篇随笔详细的描述下. 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写con ...

  8. Java集合学习笔记

      在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...

  9. TypeScript设计模式之职责链、状态

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  10. 加入大型的js文件如jQuery文件,Eclipse会报错

    在使用Eclipse3.7及以后的版本的时候,加入大型的js文件如jQuery文件,会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大 ...