一种获取控件的方法及装置的制作方法

文档序号:6436162阅读:167来源:国知局
专利名称:一种获取控件的方法及装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种Android自动化测试中获取控件的方
法及装置。
背景技术
随着Android系统在手机领域的广泛使用,针对手机的Android自动化测试也变得越来越重要。目前在Android自动化测试中,大多数是基于控件的自动化测试,通过获取当前界面的特定控件,然后对控件触发相关操作来模拟人的操作,达到自动化效果。Android系统中的控件都是继承于基类View,所述控件包括基本控件和封装控件;封装控件包括多个子控件,且封装控件是将多个子控件封装在一起的控件,如图1所示,其中每个所述子控件可以为封装控件,也可以为基本控件,但是封装控件的最底层的子控件为基本控件。现有Android自动化测试中,Android系统一般是通过调用FindViewByIdO函数来获取当前界面的特定控件,但是FindViewByIdO函数仅仅针对Android系统的非封装控件(即基本控件);对于封装控件而言,调用FindViewById ()函数无法获取到当前界面的封装控件中的子控件,于是就不能对子控件触发相关操作来实现自动化测试,只能终止Andro i d自动化测试。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有Android自动化测试中,Android系统调用的FindViewByIdO函数只能获取当前界面的非封装控件(即基本控件),无法获取当前界面的封装控件中的子控件,使得Android自动化测试中的某些功能或场景无法自动化,自动化覆盖率减低。

发明内容
为了提高Android自动化测试中的自动化覆盖率,本发明实施例提供了一种获取控件的方法及装置。所述技术方案如下一种获取控件的方法,包括根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件;递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件;根据所述第三基本控件获取当前界面的可见控件;在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。一种获取控件的装置,包括动态获取模块,用于根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件;第三基本控件获取模块,用于递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件;可见控件获取模块,用于根据所述第三基本控件获取当前界面的可见控件;
获取模块用于在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。本发明实施例提供的技术方案带来的有益效果是本实施例在Android自动化测试中,通过递归遍历出封第一装控件中的第二基本控件来获取当前界面的所有基本控件;然后对所述所有基本控件执行相关处理后,根据预定属性信息获取到符合预定属性信息的基本控件,相比较现有技术而言,可以完整实现Android自动化测试,使得自动化覆盖率提闻。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是现有技术提供的封装控件的结构示意图;图2是本发明实施例1提供的一种获取控件的方法实施例的流程图;图3是本发明实施例2提供的一种获取控件的方法实施例的流程图;图4是本发明实施例2提供的Activity组件上控件结构示意图;图5是本发明实施例3提供的一种获取控件的装置实施例的结构示意图;图6是本发明实施例4提供的一种获取控件的装置实施例的结构示意图。
具体实施例方式本发明实施例提供一种获取控件的方法及装置。为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1参考图2,图2是本发明实施例1提供的一种获取控件的方法实施例的流程图;本实施例应用于Android自动化测试中,所述获取控件的方法包括SlOl :根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件。S102:递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件。S103 :根据所述第三基本控件获取当前界面的可见控件。S104:所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。本实施例在Android自动化测试中,通过递归遍历出第一封装控件中的第二基本控件来获取当前界面的所有基本控件;然后对所述所有基本控件执行相关处理后,根据预定属性信息获取到符合预定属性信息的基本控件,相比较现有技术而言,可以完整实现Android自动化测试,使得自动化覆盖率提高。实施例2参考图3,图3是本发明实施例2提供的一种获取控件的方法实施例的流程图;本实施例应用于Android自动化测试中,所述获取控件的方法包括
S201 :根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件。动态获取信息以及动态调用对象的方法称为java反射机制Java反射机制主要提供以下功能在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。在Android系统中,当应用程序运行时,应用程序对用户的响应都是由WindowManager (窗口管理者)处理,通过特定对象(例如WindowManagerImpl类,但是并不局限于此)将所述响应透传给Android的Activity组件上的所有控件,所述控件包括基本控件和封装控件,如图4所示,图4是本发明实施例2提供的Activity组件上控件结构示意图。如图4 所不,View(显不)0、View2> View3> View4 和 View5 是 Android 系统中的基本控件;ViewGroup(显示组)I是封装控件,所述封装控件ViewGroupl中包括基本控件View3> View4 和 View5。其中所述Android系统中的基本控件包括=TextView (文本显示控件)、Button (按钮控件)、ImageButton (图片按钮控件)、ImageView (图片显示控件)、CheckBox (复选框控件)>RadioButton (单选框控件)和AnalogClock (钟表(带表盘的那种)控件);DigitalClock(电子表控件)。其中,所述Window Manager是应用程序的最上层窗口,参照Window的概念可以将WindowManager称为主窗口,其主要功能为输入法管理、新增删除窗口和活动窗口管理等。所述WindowManagerImpl 类是 Window Manager 服务的代理,连接 WindowManager和Activity之间的桥梁,负责两者之间的通信;所述WindowManagerImpl类包含Activity上的所有控件,所述所有控件包括基本控件和封装控件,所述所有控件可以存储在WindowManagerImpl类的私有变量中,但是并不局限于此。所述Activity组件是Android中最常用的组件,是应用程序的表示层,Activity一般通过View来实现应用程序的用户界面,相当于一个屏幕,用户与应用程序的交互是通过Activity组件来实现的。根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件包括根据Java反射机制,动态获取WindowManagerImpl类的相关属性;其中所述相关属性可以为WindowManagerlmpl类的私有变量,所述私有变量中存储着当前界面的第一基本控件和第一封装控件组成的控件集;遍历所述私有变量中的控件集,获取当前界面的第一基本控件和第一封装控件。S202 :递归遍历出所述第一封装控件中的第二基本控件。本实施例中,递归遍历出所述第一封装控件中的第二基本控件包括I)遍历所述第一封装控件中的子控件;2)判断所述子控件是否包含第二封装控件,如果是,递归遍历所述第二封装控件中的子控件,直至所述第二封装控件中的所有子控件均为基本控件为止;具体地,如果所述子控件包含第二封装控件,则继续递归遍历所述第二封装控件中的子控件,如此循环,直至所述第二封装控件中的所有子控件均为基本控件时终止循环。3)获取所述第一封装控件中的第二基本控件,其中所述第二基本控件为所述所有子控件。
S203:将所述第一基本控件和所述第二基本控件作为第三基本控件。在递归遍历出所述第一封装控件中的所有子控件,即第二基本控件之后,将所述第二基本控件合并S201中获取到的所述第一基本控件构成当前界面的第三基本控件,从而获取到当前界面的第三基本控件。所述当前界面的第三基本控件可以以控件列表的形式进行存储。S204 :根据所述第三基本控件获取当前界面的可见控件。实际应用中,控件都具有是否可见的属性信息,所述属性信息可以用于表示所述控件在当前界面中是否可见;具体地,当所述属性信息为可见时,所述控件为可见控件;当所述属性信息为不可见时,所述控件为不可见控件。对于Android自动化测试而言,一般是对当前界面的可见控件进行相应操作,实现自动化测试的,因此需要获取当前界面的可见控件。实际应用中,所述根据所述第三基本控件获取当前界面的可见控件包括删除所述第三基本控件中的不可见控件,获取所述当前界面的可见控件。当所述第三基本控件中不存在不可见控件时,则保留所述第三基本控件。S205:在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。对于不同的控件,可以根据控件的属性信息来获取特定控件;所述属性信息包括控件的ID信息、控件的文字信息或控件的图片信息。例如对于ImageView,所述预定属性信息可以为ImageView的图片大小、图片格式或文字等图片信息;于是可以通过在所述当前界面的可见控件中查找符合所述图片信息的控件来获取基本控件ImageView。对于Button,所述预定属性信息可以为Button的文字信息;于是可以通过在所述当前界面的可见控件中查找符合所述文字信息的控件来获取基本控件Button。当然,也可以通过控件的ID信息来获取基本控件,在此不再赘述。S206 :触发所述符合预定属性信息的基本控件,进行Android自动化测试。根据预定的属性信息获取到符合预定属性信息的基本控件后,触发所述符合预定属性信息的基本控件的相关操作,来实现完整的Android自动化测试。本实施例在Android自动化测试中,通过递归遍历出第一封装控件中的第二基本控件来获取当前界面的所有基本控件;然后对所述所有基本控件执行相关处理后,根据预定属性信息获取符合预定属性信息的基本控件,进而触发所述基本控件实现自动化测试,相比较现有技术而言,本实施例可以完整实现Android自动化测试,使得自动化覆盖率提闻。实施例3参考图5,图5是本发明实施例3提供的一种获取控件的装置实施例的结构示意图;所述获取控件的装置包括动态获取模块301,用于根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件。第三基本控件获取模块302,用于递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件。
可见控件获取模块303,用于根据所述第三基本控件获取当前界面的可见控件。获取模块304 :用于在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。本实施例在Android自动化测试中,通过递归遍历出第一封装控件中的第二基本控件来获取当前界面的所有基本控件;然后对所述所有基本控件执行相关处理后,根据预定属性信息获取符合预定属性信息的基本控件,进而触发所述基本控件实现自动化测试,相比较现有技术而言,本实施例可以完整实现Android自动化测试,使得自动化覆盖率提闻。实施例4参考图6,图6是本发明实施例4提供的一种获取控件的装置实施例的结构示意图;所述获取控件的装置包括动态获取模块301、第三基本控件获取模块302、可见控件获取模块303、获取模块304和触发模块305。所述动态获取模块301和获取模块304与实施例3中所述动态获取模块301和获取模块304的功能相似,在此不再赘述,具体可参照实施例3的相关描述。所述第三基本控件获取模块302包括递归遍历子模块3021和第三基本控件获取子模块3022 ;所述递归遍历子模块3021,用于递归遍历出所述第一封装控件中的第二基本控件;其中,所述递归遍历子模块3021包括遍历单元、判断处理单元和第二基本控件获取单元;所述遍历单元,用于遍历所述第一封装控件中的子控件。所述判断处理单元,用于判断所述子控件是否包含第二封装控件,如果是,递归遍历所述第二封装控件中的子控件,直至所述第二封装控件中的所有子控件均为基本控件为止。所述第二基本控件获取单元,用于获取所述第一封装控件中的第二基本控件,其中所述第二基本控件为所述所有子控件。所述第三基本控件获取子模块3022,用于将所述第一基本控件和所述第二基本控件作为第三基本控件。所述可见控件获取模块303包括可见控件获取子模块3031 ;所述可见控件获取子模块3031,用于删除所述第三基本控件中的不可见控件,获取当前界面的可见控件。所述触发模块305,用于触发所述符合预定属性信息的基本控件,进行Android自动化测试。本实施例在Android自动化测试中,通过递归遍历出封装控件中的所有子控件来获取当前界面的所有基本控件;然后对所述所有基本控件执行相关处理后,根据预定属性信息获取特定控件,进而触发所述控件实现自动化测试,相比较现有技术而言,本实施例可以完整实现Android自动化测试,使得自动化覆盖率提高。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本领域 普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种获取控件的方法,其特征在于,包括 根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件; 递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件; 根据所述第三基本控件获取当前界面的可见控件; 在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。
2.根据权利要求1所述的方法,其特征在于,所述递归遍历出所述第一封装控件中的第二基本控件包括 遍历所述第一封装控件中的子控件; 判断所述子控件是否包含第二封装控件,如果是,递归遍历所述第二封装控件中的子控件,直至所述第二封装控件中的所有子控件均为基本控件为止; 获取所述第一封装控件中的第二基本控件,其中所述第二基本控件为所述所有子控件。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第三基本控件获取当前界面的可见控件包括 删除所述第三基本控件中的不可见控件,获取所述当前界面的可见控件。
4.根据权利要求1所述的方法,其特征在于,所述预定属性信息包括控件的ID信息、控件的文字信息或控件的图片信息。
5.根据权利要求1所述的方法,其特征在于,所述在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件之后进一步包括 触发所述符合预定属性信息的基本控件,进行Android自动化测试。
6.一种获取控件的装置,其特征在于,包括 动态获取模块,用于根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件; 第三基本控件获取模块,用于递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件; 可见控件获取模块,用于根据所述第三基本控件获取当前界面的可见控件; 获取模块用于在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。
7.根据权利要求6所述的装置,其特征在于,所述第三基本控件获取模块包括 递归遍历子模块,用于递归遍历出所述第一封装控件中的第二基本控件; 第三基本控件获取子模块,用于将所述第一基本控件和所述第二基本控件作为第三基本控件。
8.根据权利要求7所述的装置,其特征在于,所述递归遍历子模块包括 遍历单元,用于遍历所述第一封装控件中的子控件; 判断处理单元,用于判断所述子控件是否包含第二封装控件,如果是,递归遍历所述第二封装控件中的子控件,直至所述第二封装控件中的所有子控件均为基本控件为止; 第二基本控件获取单元,用于获取所述第一封装控件中的第二基本控件,其中所述第二基本控件为所述所有子控件。
9.根据权利要求6所述的装置,其特征在于,所述可见控件获取模块包括 可见控件获取子模块,用于删除所述第三基本控件中的不可见控件,获取当前界面的可见控件。
10.根据权利要求6所述的装置,其特征在于,进一步包括 触发模块,用于触发所述符合预定属性信息的基本控件,进行Android自动化测试。
全文摘要
本发明实施例公开了一种获取控件的方法及装置,属于计算机技术领域。所述获取控件的方法包括根据Java反射机制,动态获取当前界面的第一基本控件和第一封装控件;递归遍历出所述第一封装控件中的第二基本控件,将所述第一基本控件和所述第二基本控件作为第三基本控件;根据所述第三基本控件获取当前界面的可见控件;在所述当前界面的可见控件中查找并获取符合预定属性信息的基本控件。本发明实施例可以完整实现Android自动化测试,使得自动化覆盖率提高。
文档编号G06F11/36GK103064782SQ20111032265
公开日2013年4月24日 申请日期2011年10月21日 优先权日2011年10月21日
发明者丁如敏 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1