专利名称:一种应用软件gui对象自动识别方法
技术领域:
本发明涉及一种Android或其衍生系统中应用软件⑶I对象自动识别方法,属于 软件工程领域。
背景技术:
Android系统是Google公司推出的一种基于Linux操作系统的手机系统平台。 Android系统以Java语言为基础,提供了一种统一的开发模型,用户及开发者只要熟悉此 模型并有一定的Java基础,便能根据自身需求设计开发出相应的Android应用软件。目前, 全球许多移动通信运营商以及手机开发商针对Android系统,都推出了相应的手机产品或 软件产品,Android最新版本为2. 1。同时,不仅是手机,越来越多的设备采用Android系 统,也产生了许多衍生系统。随着Android系统的不断推广,运行在Android及衍生系统上的应用软件也日益 广泛,针对相应的应用软件的研究和工具开发也逐渐深入。但是,在无法获取这些应用软件 源码的情况下,如何对其进行研究和开发相应的软件测试自动化工具、软件界面自动化工 具、软件可访问性工具、软件辅助开发工具等都是非常困难的,而这些问题的最基本前提是 必须完成Android及衍生系统的应用软件⑶I对象的自动识别。
发明内容
针对现有技术上的缺陷,本发明的目的是提出一种应用软件GUI对象自动识别方 法。该方法回避了一般GUI对象识别中对于GUI对象句柄的要求,从软件界面外观的方式 入手完成GUI对象的自动识别。该方法不需要获取应用软件的源代码,只需要应用软件的 安装包(如apk包)和相应的软件说明书或操作手册,即可完成GUI对象的自动识别。为完成上述发明目的,本发明采用下述的技术方案一种应用软件GUI对象自动识别方法,其步骤为11)建立服务器端与客户端之间的通信连接;其中服务器端装有Android系统或 其衍生系统;12)选择服务器端所装系统上的应用软件,并将所选的应用软件导入客户端;13)服务器端启动所选应用软件,并将该应用软件当前界面信息中的所有GUI对 象发送给客户端;14)客户端根据接收到GUI对象信息对所选应用软件当前所处画面进行重绘并截 图,并记录GUI的各种属性信息;15)客户端将截图显示在客户端的虚拟屏幕上,用户对虚拟屏幕进行操作,客户端 将对虚拟屏幕的操作指令发送给服务器端;16)所选应用软件执行服务器端接收到的客户端发送的操作指令,每执行一次操 作指令,服务器端监听当前操作是否完成以及是否发生新的活动,如果发生新的活动则将 其界面信息中所有GUI对象发送给客户端;重复步骤14) 16),直到执行完所有操作指令且没有发生新的活动。步骤12)通过配置客户端实现将所选的应用软件导入客户端,所述配置客户端的 方法为121)在客户端设置所选应用软件的名称;122)根据所选应用软件安装包中的配置文件查找出所选应用软件启动时的活动 名称;123)通过客户端的API接口设置所选应用软件启动时的活动名称。步骤13)至步骤16)中服务器端识别出界面信息中的所有GUI对象的方法为131)客户端根据已配置的应用软件名称和应用软件启动时的活动名称,利用API 接口向服务器端发送启动应用软件指令;132)服务器端接收到启动指令后启动应用软件,并让应用软件处于启动界面;133)客户端向服务器端发送获取GUI界面信息指令;134)服务器端利用Android或其衍生系统提供的LIST、DUMP程序获取当前活动 对应画面中所有的GUI对象信息。步骤15)和步骤133)中所述操作指令包括点击、或物理键盘操作、或软键盘输入、 或拖拽。步骤14)中客户端记录GUI的各种属性信息的方法为客户端对于每一个GUI对 象保留GUI对象的位置信息、GUI对象的尺寸信息、GUI对象所属GUI控件类别信息、GUI 对象所属的活动信息、GUI对象在界面上显示给用户的信息;然后删除GUI对象的其它信 息;最后将每个整理后的GUI对象信息格式化输出到存储器中。步骤14)中格式化的GUI对象信息采用具有约定结构的文本文件或XML文件输出 到存储器中。一种应用软件GUI对象自动识别方法,其步骤为21)建立服务器端与客户端之间的通信连接;其中服务器端装有Android系统或 其衍生系统;22)选择服务器端所装系统上的应用软件,并将所选的应用软件导入客户端;23)服务器端启动所选应用软件,并将该应用软件当前界面信息中的所有GUI对 象发送给客户端;24)客户端根据接收到⑶I对象信息,记录⑶I的各种属性信息;25)在服务器端对已被启动的所选应用软件当前界面所处活动中的GUI对象逐个 实施操作指令,每实施一次操作,服务器端监听当前操作是否完成以及是否发生新的活动, 如果发生新的活动则将其界面信息中所有GUI对象发送给客户端;重复步骤24) 25),直 到没有发生新的活动。步骤22)中通过配置客户端实现将所选的应用软件导入客户端,所述配置客户端 的方法为221)在客户端设置所选应用软件的名称;222)根据所选应用软件安装包中的配置文件查找出所选应用软件启动时的活动 名称;223)通过客户端的API接口设置所选应用软件启动时的活动名称。
步骤23)中服务器端利用Android或其衍生系统提供的LIST、DUMP程序获取当前 活动对应画面中所有的GUI对象信息;步骤25)所述操作指令包括点击、或物理键盘输入、 或软键盘输入、或拖拽。步骤24)客户端记录GUI的各种属性信息的方法为客户端对于每一个GUI对象 保留GUI对象的位置信息、GUI对象的尺寸信息、GUI对象所属GUI控件类别信息、GUI对象 所属的活动信息、GUI对象在界面上显示给用户的信息;然后删除GUI对象的其它信息;最 后将每个整理后的GUI对象信息格式化输出到存储器中;其中格式化的GUI对象信息采用 文本文件或XML文件输出到存储器中。与现有技术相比,本发明的积极效果为采用本发明的方法可以完成Android及衍生系统的应用软件GUI对象的自动识 别,从而可以满足下述应用 Android及衍生系统的软件测试自动化技术研究及工具开发; Android及衍生系统的软件用户界面自动化技术研究及工具开发; Android及衍生系统的软件可访问性技术研究及工具开发; Android及衍生系统的软件开发辅助技术研究及工具开发。
图1是GUI对象自动识别步骤流程示意图;图2是DUMP获取⑶I对象信息流程示意图;图3是活动(Activity)跳转流程图。
具体实施例方式下面结合附图和具体实施方式
对本发明作更进一步的说明。为了更清楚地理解本 发明,特此将本方案的具体实施过程描述如下如图1所示,GUI对象自动识别方法包括设备端与PC端的连接、应用软件导入时 的配置、GUI对象自动识别和GUI对象信息整理四个步骤,具体的实施方法有通过客户端操 作获取和通过手工方式获取两种,通过客户端操作获取的每一步骤的详细描述如下(1)设备端与PC端的连接。物理上装备Android或其衍生系统的设备端与PC端 是通过USB进行连接的,为了完成设备端与PC端的信息交换,在设备端与PC端利用TCP或 UDP协议连接,采用java的socket客户端/服务器端模式来实现这种连接与信息交换;其 中,装备Android或其衍生系统的设备端作为服务器端,PC端作为客户端,分别在服务器 端和客户端设置事先约定的监听端口(如分别为4394、4395),然后借助Android及衍生系 统提供的adb工具完成服务器端与客户端的连接,其工具命令使用形式为“adb forward tcp:4935tcp:4934”。在不引起冲突的情况下,端口可以根据需要替换。自动识别系统服务 器端程序和客户端程序分别安装在装备Android或其衍生系统的设备端和PC端。(2)自动识别系统客户端应用软件导入时的配置。为了在自动识别系统中导入应 用软件,需要进行如下步骤完成配置(21)在自动识别系统客户端设置导入的应用软件的名称,利用自动识别 系统PC客户端提供的API接口完成此设置。例如,该API接口可以具有如下形式
6SetAppName(IUTName),其中,IUTName参数为导入的应用软件的名称;(22)如果配置文件被加密或者压缩,利用解密或者解压缩工具(如AXMLPrinter2 等工具)将应用软件的安装包(如apk包)中的配置文件(如AndroidManifest. xml文 件)解密为原来的描述文件;(23)从得到的描述文件中根据活动(Activity)属性自动找出应用软件启动时的 活动(Activity)的名称;(24)设置应用软件启动时的活动(Activity)的名称,利用自动识别系统PC客户 端提供的API接口完成此设置。例如该API接口可以具有如下形式SetAppLoadActivityN ame (ActivityName)其中 ActivityName 为启动时的活动(Activity)的名称;(3)⑶I对象自动识别。⑶I识别的基本思路是根据⑶I对象的外观记录信息自动 识别GUI对象,其识别流程如图1所示,按照如下步骤进行(31)自动识别系统客户端根据已配置的应用软件名称和应用软件启动时的活动 (Activity)名称,利用自动识别系统PC客户端提供的API接口如SendStartMsg(IUTName, ActivityName)(其中IUTName是导入软件的名称,ActivityName是启动界面对应的活动 (Activity)名称)向自动识别系统服务器端发送启动应用软件指令;自动识别系统接收到 启动指令后调用服务器端提供的接口如StartApp (IUTNameActivityName)(其中IUTName 是导入软件的名称,ActivityName是启动界面对应的活动(Activity)名称)完成应用软 件的启动,并让应用软件处于启动界面;(32)自动识别系统客户端调用接口如loadGrahpO向自动识别系统服务器端发 送获取⑶I界面信息指令,服务器端的loadScene ()接口利用Android及其衍生系统提供 的LIST、DUMP (LIST程序列出Android系统或其衍生系统中所有进程,DUMP程序导出应用 程序当前所处活动的外观信息)程序获取当前活动(Activity)对应画面中所有的GUI对 象信息,因为一个窗体上的所有⑶I组件是以树形结构为基本组织形式的,所以逐个获取 所有GUI对象的信息时需要进行树的遍历。其流程图如图2,其遍历算法示例代码如下所 示Absolute_compute (GUI 组件结点 Node)
{
If (Node有子结点)
{
For (all subNode in Node)
{
Absolute_compute (subNode) ;// 递归解析
}
}
获取根节点信息;
Return ;
}服务器端获取完成后向客户端发送scene数据,客户端通过done ()接口完成⑶I 对象信息在客户端的虚拟屏幕的重绘并结束loadGraphO调用;
7
(33)自动识别系统客户端将截图显示在客户端的虚拟屏幕上,用户对虚拟屏 幕进行操作,自动识别系统客户端向服务器端发送点击、软键盘输入或拖拽等操作指令, 服务器端将接收的指令传递给应用软件驱动软件执行并监听应用软件是否跳转到新的 活动(Activity),如果应用软件跳转到新的活动,则服务器端向客户端发送新的活动 (Activity)界面信息;采用深度遍历算法对(32) (33)步骤进行遍历,直至所有的activity 都被遍历;在这一过程中,为了遍历所有的活动(Activity),也就是找出所有的活动 (Activity)之间的跳转关系,其流程图如图3所示,其具体流程为(331)通过客户端的done接口(此接口完成对当前画面截图)和客户端的 loadScene接口(此接口调用Android及其衍生系统提供的LIST和DUMP工具获取当前画 面中所有的⑶I对象信息),客户端loadGraph接口(此接口向服务器端发送获取⑶I消息 指令并将done函数中产生的画面截图在识别系统中显示)获取当前活动(Activity)对应 的画面中的⑶I对象信息并将当前活动(Activity)画面载入PC端的虚拟屏幕;(332)用户在客户端通过虚拟屏幕向服务器端发送指令,调用获取鼠标 对亍为禾口键盘对亍为的接 口 getMouseAction/getKeyAction、saveAndSendAction (此 接口保存鼠标行为和键盘行为,并通过此前建立的连接发送相应的指令信息)、 c 1 earMouseStartPositionAndTime (将此前按下鼠标的位置和时间信息清除,以便下次 记录)等接口驱动服务器应用软件执行,服务器端监听应用软件是否跳转到新的活动 (Activity),如果是则服务器端利用DUMP获取新的活动(Activity)中的⑶I对象信息并 发送给客户端;(333)自动识别系统客户端调用getNewScreen接口(此接口获取当前画面的截 图)获取新的活动(Activity)的截图画面,并利用done接口和loadGraph接口完成截图 的绘制;(334)利用深度遍历算法重复(332) (333)步骤,直至所有的activity被访问。(4)⑶I对象信息整理,这一步主要是对⑶I对象信息的内容进行裁剪以及⑶I对 象信息格式化整理,利用自动识别系统客户端提供的接口 Get⑶IlnformationaextName) 进行整理,其中,textName是前一步骤中获取的记录GUI对象的所有信息的文本文件, Get⑶Ilnformation接口主要完成冗余信息的剔除和⑶I对象格式的整理,并输出一份格 式化的GUI对象信息文本文件或XML文件。通过手工方式是指用户直接在服务器端即设备端进行操作,服务器端向客户端发 送GUI信息,客户端从而获取GUI信息,其具体实施步骤为(1)设备端与PC端的连接。物理上装备Android或其衍生系统的设备端与PC端 是通过USB进行连接的,为了完成设备端与PC端的信息交换,在设备端与PC端利用TCP或 UDP协议连接,采用java的socket客户端/服务器端模式来实现这种连接与信息交换;其 中,装备Android或其衍生系统的设备端作为服务器端,PC端作为客户端,分别在服务器 端和客户端设置事先约定的监听端口(如分别为4394、4395),然后借助Android及衍生系 统提供的adb工具完成服务器端与客户端的连接,其工具命令使用形式为“adb forward tcp:4935tcp:4934”。在不引起冲突的情况下,端口可以根据需要替换。自动识别系统服务 器端程序和客户端程序分别安装在装备Android或其衍生系统的设备端和PC端。
(2)自动识别系统客户端应用软件导入时的配置。为了在自动识别系统中导入应 用软件,需要进行如下步骤完成配置(21)在自动识别系统客户端设置导入的应用软件的名称,利用自动识别 系统PC客户端提供的API接口完成此设置。例如,该API接口可以具有如下形式 SetAppName(IUTName),其中,IUTName参数为导入的应用软件的名称;(22)如果配置文件被加密或者压缩,利用解密或者解压缩工具(如AXMLPrinter2 等工具)将应用软件的安装包(如apk包)中的配置文件(如AndroidManifest. xml文 件)解密为原来的描述文件;(23)从得到的描述文件中根据活动(Activity)属性自动找出应用软件启动时的 活动(Activity)的名称;(24)设置应用软件启动时的活动(Activity)的名称,利用自动识别系统PC客户 端提供的API接口完成此设置。例如该API接口可以具有如下形式SetAppLoadActivityN ame (ActivityName)其中 ActivityName 为启动时的活动(Activity)的名称;(3) GUI对象自动识别。GUI识别的基本思路是根据GUI对象的外观记录信息自动 识别GUI对象,其识别流程如图1所示,按照如下步骤进行(31)自动识别系统客户端根据已配置的应用软件名称和应用软件启动时的活动 (Activity)名称,利用自动识别系统PC客户端提供的API接口如SendStartMsg(IUTName, ActivityName)(其中IUTName是导入软件的名称,ActivityName是启动界面对应的活动 (Activity)名称)向自动识别系统服务器端发送启动应用软件指令;自动识别系统服务器 端接收到启动指令后调用服务器端提供的接口如StartApp (IUTName,ActivityName)(其 中IUTName是导入软件的名称,ActivityName是启动界面对应的活动(Activity)名称)完 成应用软件的启动,并让应用软件处于启动界面;(32)自动识别系统客户端调用接口如Catch⑶IlnfoO等接口向服务器端发送获 取界面信息指令,服务器端的loadSceneO接口利用Android及其衍生系统提供的LIST、 DUMP (LIST程序列出Android系统或其衍生系统中所有进程,DUMP程序导出应用程序当前 所处活动的外观信息)程序获取当前活动(Activity)对应画面中所有的GUI对象信息,因 为一个窗体上的所有GUI组件是以树形结构为基本组织形式的,所以逐个获取所有GUI对 象的信息时需要进行树的遍历。其流程图如图2,其遍历算法示例代码如下所示Absolute_compute (GUI 组件结点 Node){
If (Node有子结点)
{
For (all subNode in Node) {
Absolute_compute (subNode) ;// 递归解析
} }
获取根节点信息; Return ;
服务器端获取完成后向客户端发送scene数据,客户端获取GUI信息并结束 CatchGUIInfo ()接口 的调用;(33)用户在服务器端对已被启动的应用软件实施GUI操作,每实施一次操作,自 动识别系统的服务器端都会监听设备端操作后所处的活动(Activity)是否是新的活动 (Activity),如果是新的活动(Activity),则向客户端发送新活动指令,客户端接收到指令 后采用深度遍历算法对(32) (33)步骤进行遍历,直至所有的活动(Activity)都被遍历。(4)⑶I对象信息整理,这一步主要是对⑶I对象信息的内容进行裁剪以及⑶I对 象信息格式化整理,利用自动识别系统客户端提供的接口 Get⑶IlnformationaextName) 进行整理,其中,textName是前一步骤中获取的记录GUI对象的所有信息的文本文件, Get⑶Ilnformation接口主要完成冗余信息的剔除和⑶I对象格式的整理,并输出一份格 式化的GUI对象信息文本文件或XML文件。上面对本发明所述的一种面向Android及其衍生系统的应用软件的GUI对象自动 识别方法进行了详细的说明,但显然仍然可以做出各种修改和变换而不背离本发明的精神 和范围,因此,说明书应被认为是说明性的而非限制性的,其中的各个接口的解释是示意性 的,完成类似功能的接口仍然属于本方法的精神和权力要求范围。对于本技术领域的一般 技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种 显而易见的改变都在本发明的保护范围之内。附图3的说明workspace表示客户端工作区类;screenViewer客户端截图显 示区类;Crosshire表示客户端用户操作具体位置的类;ScreenshotViewer表示客户端 显示背景图的类;LoadGraphTask和FinishiGraph分别表示客户端执行截图的任务类; GetScreenshotTask表示客户端获取截图任务的类;ViewHierarchyLoader表示服务器端 的GUI对象信息获取类。
权利要求
一种应用软件GUI对象自动识别方法,其步骤为1)建立服务器端与客户端之间的通信连接;其中服务器端装有Android系统或其衍生系统;2)选择服务器端所装系统上的应用软件,并将所选的应用软件导入客户端;3)服务器端启动所选应用软件,并将该应用软件当前界面信息中的所有GUI对象发送给客户端;4)客户端根据接收到GUI对象信息对所选应用软件当前所处画面进行重绘并截图,并记录GUI的各种属性信息;5)客户端将截图显示在客户端的虚拟屏幕上,并将对虚拟屏幕的操作指令发送给服务器端;6)所选应用软件执行服务器端接收到的客户端发送的操作指令,每执行一次操作指令,服务器端监听当前操作是否完成以及是否发生新的活动,如果发生新的活动则将其界面信息中所有GUI对象发送给客户端;重复步骤4)~6),直到执行完所有操作指令且没有发生新的活动。
2.如权利要求1所述的方法,其特征在于通过配置客户端实现将所选的应用软件导入 客户端,所述配置客户端的方法为1)在客户端设置所选应用软件的名称;2)根据所选应用软件安装包中的配置文件查找出所选应用软件启动时的活动名称;3)通过客户端的API接口设置所选应用软件启动时的活动名称。
3.如权利要求2所述的方法,其特征在于服务器端识别出界面信息中的所有GUI对象 的方法为1)客户端根据已配置的应用软件名称和应用软件启动时的活动名称,利用API接口向 服务器端发送启动应用软件指令;2)服务器端接收到启动指令后启动应用软件,并让应用软件处于启动界面;3)客户端向服务器端发送获取GUI界面信息指令;4)服务器端利用Android或其衍生系统提供的LIST、DUMP程序获取当前活动对应画 面中所有的GUI对象信息。
4.如权利要求1或3所述的方法,其特征在于所述操作指令包括点击、或物理键盘操 作、或软键盘输入、或拖拽。
5.如权利要求1所述的方法,其特征在于客户端记录GUI的各种属性信息的方法为 客户端对于每一个GUI对象保留GUI对象的位置信息、GUI对象的尺寸信息、GUI对象所 属GUI控件类别信息、GUI对象所属的活动信息、GUI对象在界面上显示给用户的信息;然 后删除GUI对象的其它信息;最后将每个整理后的GUI对象信息格式化输出到存储器中。
6.如权利要求5所述的方法,其特征在于格式化的GUI对象信息采用设定结构的文本 文件或XML文件输出到存储器中。
7.一种应用软件GUI对象自动识别方法,其步骤为1)建立服务器端与客户端之间的通信连接;其中服务器端装有Android系统或其衍生 系统;2)选择服务器端所装系统上的应用软件,并将所选的应用软件导入客户端;3)服务器端启动所选应用软件,并将该应用软件当前界面信息中的所有GUI对象发送 给客户端;4)客户端根据接收到GUI对象信息,记录GUI的各种属性信息;5)在服务器端对已被启动的所选应用软件当前界面所处活动中的GUI对象逐个实施 操作指令,每实施一次操作,服务器端监听当前操作是否完成以及是否发生新的活动,如果 发生新的活动则将其界面信息中所有GUI对象发送给客户端;重复步骤4) 5),直到没有 发生新的活动。
8.如权利要求7所述的方法,其特征在于通过配置客户端实现将所选的应用软件导入 客户端,所述配置客户端的方法为1)在客户端设置所选应用软件的名称;2)根据所选应用软件安装包中的配置文件查找出所选应用软件启动时的活动名称;3)通过客户端的API接口设置所选应用软件启动时的活动名称。
9.如权利要求7所述的方法,其特征在于服务器端利用Android或其衍生系统提供的 LIST、DUMP程序获取当前活动对应画面中所有的GUI对象信息;所述操作指令包括点击、或 物理键盘输入、或软键盘输入、或拖拽。
10.如权利要求7所述的方法,其特征在于客户端记录GUI的各种属性信息的方法为 客户端对于每一个GUI对象保留GUI对象的位置信息、GUI对象的尺寸信息、GUI对象所属 GUI控件类别信息、GUI对象所属的活动信息、GUI对象在界面上显示给用户的信息;然后删 除GUI对象的其它信息;最后将每个整理后的GUI对象信息格式化输出到存储器中;其中 格式化的GUI对象信息采用文本文件或XML文件输出到存储器中。
全文摘要
本发明公开了一种应用软件GUI对象自动识别方法,属于软件工程领域。本方法为1)建立服务器端与客户端之间的通信连接;2)将服务器端所选应用软件导入客户端;3)服务器端启动所选应用软件,并将其当前界面信息中GUI对象发送给客户端;4)客户端进行重绘并截图,并记录GUI属性信息;5)客户端将截图显示在客户端的虚拟屏幕上,并将对虚拟屏幕的操作指令发送给服务器端;6)所选应用软件每执行一次操作指令,服务器端监听当前操作是否完成以及是否发生新的活动,如果发生新的活动则将其界面信息中GUI对象发送给客户端;重复步骤4)~6),直到执行完所有操作指令且没有发生新的活动。本发明可完成Android及衍生系统的应用软件GUI对象的自动识别。
文档编号H04L29/06GK101853157SQ20101017785
公开日2010年10月6日 申请日期2010年5月14日 优先权日2010年5月14日
发明者安朗, 张亚峰, 薛云志, 郑东阳, 陈军成 申请人:中国科学院软件研究所