CN104572430B - 一种终端应用界面的测试方法、装置和*** - Google Patents
一种终端应用界面的测试方法、装置和*** Download PDFInfo
- Publication number
- CN104572430B CN104572430B CN201310507853.XA CN201310507853A CN104572430B CN 104572430 B CN104572430 B CN 104572430B CN 201310507853 A CN201310507853 A CN 201310507853A CN 104572430 B CN104572430 B CN 104572430B
- Authority
- CN
- China
- Prior art keywords
- node
- present
- list
- control leaf
- child
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Small-Scale Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种终端应用界面的测试方法、装置和***,本发明实施例可以获取当前界面的第一控件叶子节点列表,确定根节点并建立访问树,使得第一控件叶子节点列表中的所有节点作为根节点的子节点,确定根节点为新当前节点,然后基于访问树对当前节点下的子节点进行遍历,此后,在获取到不等于第一控件叶子节点列表的第二控件叶子节点列表时,将第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点为当前节点,当当前节点不是根节点且当前节点的所有子节点均被访问过时,确定当前节点的父节点为新当前节点,并返回执行基于访问树对当前节点下的子节点进行遍历的步骤;否则,返回执行对访问树中的节点进行遍历的步骤。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种终端应用界面的测试方法、装置和***。
背景技术
终端应用,指的是终端上的应用程序,随着各种智能终端的普及,终端应用的种类也愈发繁多,为了验证终端应用的性能,以及能够及时对终端应用进行优化和改进,使得用户获得更好的体验,需要对终端应用界面进行测试。
在现有技术中,一般通过对控件进行遍历来对终端应用界面进行测试,以安卓***为例,由于安卓***中的终端应用界面一般由多个组件(Activity)组成,因此,可以分别对各个组件中的所有控件进行有效遍历,来测试各个组件的性能,例如,如果某个终端应用界面包括组件A和组件B,则可以先确定组件A为当前组件,然后对组件A中的所有控件进行有效遍历,来测试组件A的性能,在对组件A遍历完毕之后,再重新确定当前组件,比如可以确定组件B为当前组件,然后才对组件B中的控件进行有效遍历,以测试组件B的性能,等等,以此类推。
在对现有技术的研究和实践过程中,本发明的发明人发现,现有方案只能对当前组件的控件进行有效遍历,而对所有组件的遍历则无能实现,而且,在遍历终端应用界面当前组件的控件过程中,若当前的树(Tree)控件结构被访问动作破坏,比如,对界面上的某个“按钮(Button)”进行点击(Click)操作后,组件发生切换,则树控件结构和终端应用界面将不再匹配,那么此时,将会影响遍历的有效性,最终导致测试出错。
发明内容
本发明实施例提供一种终端应用界面的测试方法、装置和***,可以对终端应用界面的所有组件进行全随机遍历,而且,当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
一种终端应用界面的测试方法,包括:
获取当前界面的第一控件叶子节点列表;
确定根节点,根据所述根节点和所述第一控件叶子节点列表建立访问树,使得所述第一控件叶子节点列表中的所有节点作为所述根节点的子节点,并确定所述根节点为当前节点;
基于所述访问树对当前节点下的子节点进行遍历;
获取当前界面的第二控件叶子节点列表;
确定所述第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将所述第二控件叶子节点列表添加到所述访问树中,使得所述第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定所述跳转节点为新的当前节点,所述跳转节点为触发获取所述第二控件叶子节点列表的节点;
确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过;
若当前节点不是所述根节点,且当前节点的所有子节点均被访问过,则确定所述当前节点的父节点为新的当前节点,并返回执行基于所述访问树对当前节点下的子节点进行遍历的步骤;
若确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点,则返回执行基于所述访问树对当前节点下的子节点进行遍历的步骤。
一种终端应用界面的测试装置,其特征在于,包括:
第一获取单元,用于获取当前界面的第一控件叶子节点列表;
建立单元,用于确定根节点,根据所述根节点和所述第一控件叶子节点列表建立访问树,使得所述第一控件叶子节点列表中的所有节点作为所述根节点的子节点,并确定所述根节点为当前节点;
遍历单元,用于基于所述访问树对当前节点下的子节点进行遍历;
第二获取单元,用于获取当前界面的第二控件叶子节点列表;
添加单元,用于确定所述第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将所述第二控件叶子节点列表添加到所述访问树中,使得所述第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定所述跳转节点为当前节点,所述跳转节点为触发获取所述第二控件叶子节点列表的节点;
判断单元,用于确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过,在确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,触发遍历单元返回执行基于所述访问树对当前节点下的子节点进行遍历的操作;
处理单元,用于在判断单元确定当前节点不是所述根节点,且当前节点的所有子节点均被访问过时,确定所述当前节点的父节点为新的当前节点,并触发遍历单元执行基于所述访问树对当前节点下的子节点进行遍历的操作。
一种通信***,本发明实施例提供的任一种终端应用界面的测试装置。
本发明实施例采用获取当前界面的第一控件叶子节点列表,确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点,然后基于该访问树对当前节点下的子节点进行遍历,此后,获取当前界面的第二控件叶子节点列表,确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,将第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点(跳转节点为触发获取该第二控件叶子节点列表的节点)为新的当前节点,当当前节点不是根节点,且当前节点的所有子节点均被访问过时,确定该当前节点的父节点为新的当前节点,并返回执行基于该访问树对当前节点下的子节点进行遍历的步骤;当确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,返回执行基于访问树对当前节点下的子节点进行遍历的步骤。由于在该方案中,采用了根据根节点和第一控件叶子节点列表建立访问树,使得第一控件叶子节点列表中的所有节点作为该根节点的子节点,此后在获取到不同于第一控件叶子节点列表的第二控件叶子节点列表时,又可以将第二控件叶子节点列表作为跳转节点的子节点,因此,可以将多个不同的控件叶子节点列表添加到同一访问树下,从而实现对终端应用界面的所有组件进行全随机遍历的目的,相对于现有技术而言,可以减少遍历的节点数,提高遍历效率;而且,在当前树控件结构被访问动作破坏时,还可以对当前界面是否发生变化进行判断,并采用不同的处理方式来确保控件数模型和界面保持一致,因此,对当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供终端应用界面的测试方法的流程图;
图2是本发明实施例提供终端应用界面的测试方法的另一流程图;
图3是本发明实施例提供终端应用界面的测试的结构示意图;
图4是本发明实施例提供的终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需说明的是,本发明实施例所说的测试,指的是修复前平均时间(MTTF,Mean TimeTo Failure)测试。所谓MTTF,指的是某个元件预计的可运作平均时间。由于硬体元件故障通常是永久的,因此通常修复或替换该元件所需的时间也很重要,也就是修复前平均时间,即寿命均值,记为MTTF。为了描述方便,在本发明实施中均称为测试。
此外,本发明实施例所说的遍历,指的是深度优先遍历(Depth-First Search)。例如,假设给定访问树G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时访问树中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。
本发明实施例提供一种终端应用界面的测试方法、装置和***。以下分别进行详细说明。
实施例一、
在本实施例中,将以终端应用界面的测试装置的角度进行描述,该终端应用界面的测试装置具体可以集成在终端中,该终端具体可以为智能手机和平板电脑等等。
一种终端应用界面的测试方法,包括:获取当前界面的第一控件叶子节点列表;确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点;基于该访问树对当前节点下的子节点进行遍历;获取当前界面的第二控件叶子节点列表;确定该第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将该第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点(即跳转节点为触发获取所述第二控件叶子节点列表的节点)为新的当前节点;确定当前节点是否为该根节点,以及当前节点的所有子节点是否均被访问过;若当前节点不是根节点,且当前节点的所有子节点均被访问过,则确定该当前节点的父节点为新的当前节点,并返回执行基于访问树对当前节点下的子节点进行遍历的步骤;若确定当前节点为根节点,或当前节点存在有尚未被访问过的子节点,则返回执行对该访问树中的节点进行遍历的步骤。
如图1所示,具体流程可以如下:
101、获取当前界面的第一控件叶子节点列表。
其中,该第一控件叶子节点列表包括至少一个节点。
102、确定根节点,根据该根节点和步骤101中获取到的第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点。
例如,具体可以定义一个空节点为根节点,然后以该根节点作为父节点,以第一控件叶子节点列表中的所有节点作为该父节点的子节点(该第一控件叶子节点列表中的所有节点为该根节点的同一级子节点),建立访问树,其中,该访问树为非二叉树,初始时,可以确定根节点为当前节点,即将访问指针指向根节点。
103、基于该访问树对当前节点下的子节点进行遍历。例如,具体可以如下:
确定该根节点还存在尚未访问的子节点时,从尚未访问的子节点中获取一个子节点,作为测试节点,然后对该测试节点进行测试,并在测试完毕将该测试节点标识为已经访问。
而若确定该根节点不存在尚未访问的子节点,则表明遍历已完成,可以结束流程。
其中,步骤“对该测试节点进行测试,并在测试完毕将该测试节点标识为已经访问”具体可以如下:
将该测试节点的哈希码值设定为第一码值,其中,该第一码值用于标识当前界面的特性等信息;对该测试节点进行预置操作,比如,进行点击、滑动和/或拖动等操作,然后在操作完毕将该测试节点标识为已经访问。
此时,可选的,还可以将当前节点下尚未访问的子节点数目减1,以便对当前节点下尚未访问的子节点数目进行统计,以及也可以通过当前节点下尚未访问的子节点数目是否为0来确定根节点是否还存在尚未访问的子节点,比如,如果尚未访问的子节点数目是否为0,则表明不存在尚未访问的子节点,否则,如果尚未访问的子节点数目大于0,则表明存在尚未访问的子节点,等等。
104、获取当前界面的第二控件叶子节点列表。
其中,该第二控件叶子节点列表包括至少一个节点。
105、确定步骤104中获取到的第二控件叶子节点列表不等于第一控件叶子节点列表时,将该第二控件叶子节点列表添加到访问树中,使得该第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点为新的当前节点,即将访问指针指向该跳转节点。
其中,本发明实施例所说的跳转节点指的是第一控件叶子节点列表中可以触发获取第二控件叶子节点列表的节点。
可选的,为了防止操作后出现“回路”而形成闭环,导致遍历进入死循环,可以对是否存在“回路”进行判断,即在将该第二控件叶子节点列表添加到访问树中之前,该方法还可以包括:
查找该跳转节点的父节点中是否存在有哈希码值相同的节点;若存在,则删除该跳转节点,确定查找到的节点为新的当前节点,并执行步骤106,即执行确定当前节点是否为根节点,以及当前节点的所有子节点是否均被访问过的步骤;若不存在,则返回执行将该第二控件叶子节点列表添加到访问树中的步骤。
此外,需说明的是,如果第二控件叶子节点列表等于该第一控件叶子节点列表,则可以直接执行步骤106,即执行“确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过”的步骤。也就是说,在步骤“获取当前界面的第二控件叶子节点列表”之后,该方法还可以包括:
若该第二控件叶子节点列表等于第一控件叶子节点列表,则执行确定当前节点是否为根节点,以及当前节点的所有子节点是否均被访问过的步骤。
可选的,为了提高遍历效率,避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,还可以删除该跳转节点。
106、确定当前节点是否为根节点,以及确定当前节点的所有子节点是否均被访问过,若确定当前节点不是根节点,且当前节点的所有子节点均被访问过,则执行步骤107,否则,若确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点,则返回执行步骤103,即执行“基于该访问树对当前节点下的子节点进行遍历”的步骤。
107、若当前节点不是根节点,且当前节点的所有子节点均被访问过,则确定该当前节点的父节点为新的当前节点,即将访问指针指向该当前节点的父节点,并返回执行步骤103,即执行“基于该访问树对当前节点下的子节点进行遍历”的步骤。
由上可知,本实施例采用获取当前界面的第一控件叶子节点列表,确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点,然后基于该访问树对当前节点下的子节点进行遍历,此后,获取当前界面的第二控件叶子节点列表,确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,将第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点(跳转节点为触发获取该第二控件叶子节点列表的节点)为新的当前节点,当当前节点不是根节点,且当前节点的所有子节点均被访问过时,确定该当前节点的父节点为新的当前节点,并返回执行基于该访问树对当前节点下的子节点进行遍历的步骤;当确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,返回执行基于访问树对当前节点下的子节点进行遍历的步骤。由于在该方案中,采用了根据根节点和第一控件叶子节点列表建立访问树,使得第一控件叶子节点列表中的所有节点作为该根节点的子节点,此后在获取到不同于第一控件叶子节点列表的第二控件叶子节点列表时,又可以将第二控件叶子节点列表作为跳转节点的子节点,因此,可以将多个不同的控件叶子节点列表添加到同一访问树下,从而实现对终端应用界面的所有组件进行全随机遍历的目的,相对于现有技术而言,可以减少遍历的节点数,提高遍历效率;而且,在当前树控件结构被访问动作破坏时,还可以对当前界面是否发生变化进行判断,并采用不同的处理方式来确保控件数模型和界面保持一致,因此,对当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
实施例二、
根据实施例一所描述的方法,以前将进一步作详细说明。
在本实施例中,将以该终端应用界面的测试装置具体集成在终端中为例进行说明。
如图2所示,一种终端应用界面的测试方法,具体流程可以如下:
201、终端获取当前界面的第一控件叶子节点列表。
其中,该第一控件叶子节点列表包括至少一个节点。
比如,以该第一控件叶子节点列表为List allElementsA为例,则其代码具体可以如下:
List allElementsA=获取当前界面所有控件列表的叶子节点; |
202、终端定义一个空节点为根节点,根据该根节点和和获取到的第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点。
其中,该访问树为非二叉树,初始时,可以确定根节点为当前节点,即将访问指针指向根节点。例如,其代码具体可以如下:
其中,Element root为根节点,简称为root;Element pre为当前节点,简称为pre。
203、终端确定该根节点是否还存在尚未访问的子节点,若是,则执行步骤204;若否,则表明遍历已完成,可以结束流程;例如,其代码具体可以如下:
204、终端从尚未访问的子节点中随机获取一个子节点,作为测试节点,然后将该测试节点的哈希码值设定为第一码值,其中,该第一码值用于标识当前界面的特性等信息,比如,具体可以为“allElementsA.hashCode”;对该测试节点进行预置操作,比如,进行点击、滑动和/或拖动等操作,然后在操作完毕将该测试节点标识为已经访问。
此时,可选的,还可以将当前节点下尚未访问的子节点数目减1,以便对当前节点下尚未访问的子节点数目进行统计。
例如,具体代码可以如下:
此外,由于在遍历的过程中,可以对某些非功能控件所对应的节点进行删除,所以,可以避免对某些非功能控件的访问,进一步提高遍历效率。
205、终端获取当前界面的第二控件叶子节点列表。
其中,该第二控件叶子节点列表包括至少一个节点。
比如,以该第一控件叶子节点列表为List allElementsB为例,则其代码具体可以如下:
List allElementsB=获取当前界面所有控件列表的叶子节点; |
206、终端确定第二控件叶子节点列表是否等于第一控件叶子节点列表,若是,则执行步骤208,若否,则执行步骤207,例如,具体代码可以如下:
If(allElementsB!=allElementsA){ |
207、终端确定第二控件叶子节点列表不等于第一控件叶子节点列表时,将该第二控件叶子节点列表添加到访问树中,使得该第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点为新的当前节点,即将访问指针指向该跳转节点,此时,还可以保存本次控件树的信息。
其中,该跳转节点指的是第一控件叶子节点列表中可以触发获取第二控件叶子节点列表的节点。
可选的,为了防止操作后出现“回路”而形成闭环,导致遍历进入死循环,可以对是否存在“回路”进行判断,即在将该第二控件叶子节点列表添加到访问树中之前,还可以包括:
查找该跳转节点的父节点中是否存在有哈希码值相同的节点;若存在,则删除该跳转节点,确定查找到的节点为新的当前节点,将将访问指针指向该查找到的节点,并执行步骤209;若不存在,则返回执行将该第二控件叶子节点列表添加到访问树中的步骤。
例如,具体可以采用如下代码:
208、如果第二控件叶子节点列表等于该第一控件叶子节点列表,则终端删除该跳转节点,然后执行步骤209;
例如,具体代码可以如下:
209、终端确定当前节点是否为根节点,以及确定当前节点的所有子节点是否均被访问过,若确定当前节点不是根节点,且当前节点的所有子节点均被访问过,则执行步骤210;否则,若确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点,则执行步骤203。
210、若当前节点不是根节点,且当前节点的所有子节点均被访问过,则返回到该当前节点的父节点所在的界面,比如点击回退按钮,回到上一个界面,然后确定该当前节点的父节点为新的当前节点,即将访问指针指向该当前节点的父节点,并返回执行步骤203。例如,其代码具体可以如下:
由上可知,本实施例采用获取当前界面的第一控件叶子节点列表,确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点,然后基于该访问树对当前节点下的子节点进行遍历,此后,获取当前界面的第二控件叶子节点列表,确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,将第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点(跳转节点为触发获取该第二控件叶子节点列表的节点)为新的当前节点,当当前节点不是根节点,且当前节点的所有子节点均被访问过时,确定该当前节点的父节点为新的当前节点,并返回执行基于该访问树对当前节点下的子节点进行遍历的步骤;当确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,返回执行基于访问树对当前节点下的子节点进行遍历的步骤。由于在该方案中,采用了根据根节点和第一控件叶子节点列表建立访问树,使得第一控件叶子节点列表中的所有节点作为该根节点的子节点,此后在获取到不同于第一控件叶子节点列表的第二控件叶子节点列表时,又可以将第二控件叶子节点列表作为跳转节点的子节点,因此,可以将多个不同的控件叶子节点列表添加到同一访问树下,从而实现对终端应用界面的所有组件进行全随机遍历的目的,相对于现有技术而言,可以减少遍历的节点数,提高遍历效率;而且,在当前树控件结构被访问动作破坏时,还可以对当前界面是否发生变化进行判断,并采用不同的处理方式来确保控件数模型和界面保持一致,因此,对当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
而且,由于在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,可以删除跳转节点,因此,可以避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),可以提高遍历效率。
进一步的,由于每次遍历节点操作后,可以对操作前后的界面进行比较,并采用不同的处理方式来避免“回路”的出现,因此,可以防止环路的发生,避免遍历进入死循环。而且,由于本方案可以随机挑选当前节点的子节点来达到随机访问的目的,因此,相对于现有技术只能按照某种特定的遍历顺序而言,显得更加灵活,而且还可以防止某个固定路径导致MTTF卡死的情况的发生。
实施例三、
为了更好地实施以上方法,本发明实施例还提供一种终端应用界面的测试装置,如图3所示,该终端应用界面的测试装置包括第一获取单元301、建立单元302、遍历单元303、第二获取单元304、添加单元305、判断单元306和处理单元307;
第一获取单元301,用于获取当前界面的第一控件叶子节点列表;
其中,该第一控件叶子节点列表包括至少一个节点。
建立单元302,用于确定根节点,根据该根节点和所述第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点。
例如,具体可以定义一个空节点为根节点,然后以该根节点作为父节点,以第一控件叶子节点列表中的所有节点作为该父节点的子节点(该第一控件叶子节点列表中的所有节点为该根节点的同一级子节点),建立访问树,其中,该访问树为非二叉树,初始时,可以确定根节点为当前节点,即将访问指针指向根节点。
遍历单元303,用于基于该访问树对当前节点下的子节点进行遍历。
第二获取单元304,用于获取当前界面的第二控件叶子节点列表。
添加单元305,用于确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,将第二控件叶子节点列表添加到该访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点为当前节点。
其中,该跳转节点指的是第一控件叶子节点列表中可以触发获取第二控件叶子节点列表的节点。
判断单元306,用于确定当前节点是否为根节点,以及当前节点的所有子节点是否均被访问过,确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,触发遍历单元303返回执行基于访问树对当前节点下的子节点进行遍历的操作;
处理单元307,用于在判断单元306确定当前节点不是根节点,且当前节点的所有子节点均被访问过时,确定当前节点的父节点为新的当前节点,并触发遍历单元303执行基于访问树对当前节点下的子节点进行遍历的操作;
例如,其中,遍历单元303可以包括节点获取子单元和测试子单元;
节点获取子单元,用于确定根节点还存在尚未访问的子节点时,从尚未访问的子节点中获取一个子节点,作为测试节点;
测试子单元,用于对该测试节点进行测试,并在测试完毕将该测试节点标识为已经访问,例如,具体可以如下:
测试子单元,具体可以用于将该测试节点的哈希码值设定为第一码值,其中,该第一码值用于标识当前界面的特性等信息;对该测试节点进行预置操作,比如,进行点击、滑动和/或拖动等操作,然后在操作完毕将该测试节点标识为已经访问。
此时,可选的,还可以将当前节点下尚未访问的子节点数目减1,以便对当前节点下尚未访问的子节点数目进行统计,以及节点获取子单元也可以通过当前节点下尚未访问的子节点数目是否为0来确定根节点是否还存在尚未访问的子节点,比如,如果尚未访问的子节点数目是否为0,则表明不存在尚未访问的子节点,否则,如果尚未访问的子节点数目大于0,则表明存在尚未访问的子节点,等等。
可选的,为了防止操作后出现“回路”而形成闭环,导致遍历进入死循环,可以对是否存在“回路”进行判断,即在将该第二控件叶子节点列表添加到访问树中之前,还可以通过查找该跳转节点的父节点中是否存在有哈希码值相同的节点来判断是否存在“回路”,即该终端应用界面的测试装置还可以包括第三处理单元;
第三处理单元,用于查找该跳转节点的父节点中是否存在有哈希码值相同的节点;若存在,则删除该跳转节点,确定查找到的节点为新的当前节点,并触发判断单元执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的操作;若不存在,则触发添加单元305执行将该第二控件叶子节点列表添加到访问树中的操作。
此外,需说明的是,如果第二控件叶子节点列表等于该第一控件叶子节点列表,则可以直接执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的操作,即:
判断单元306,还可以用于在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,执行确定当前节点是否为根节点,以及当前节点的所有子节点是否均被访问过的操作。
可选的,为了提高遍历效率,避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,还可以删除该跳转节点;即该终端应用界面的测试装置还可以包括删除单元;
删除单元,用于在在确定第二控件叶子节点列表等于所述第一控件叶子节点列表时,删除所述跳转节点。
具体实现时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
该终端应用界面的测试装置具体可以集成在终端中,该终端具体可以为智能手机和平板电脑等等。
由上可知,本实施例的第一获取单元301可以获取当前界面的第一控件叶子节点列表,由建立单元302确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点,然后由遍历单元303基于该访问树对当前节点下的子节点进行遍历,此后,第二获取单元304还可以获取当前界面的第二控件叶子节点列表,在确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,由添加单元305将第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点(跳转节点为触发获取该第二控件叶子节点列表的节点)为新的当前节点,当判断单元306确定当前节点不是根节点,且当前节点的所有子节点均被访问过时,处理单元307确定该当前节点的父节点为新的当前节点,并触发遍历单元303执行基于该访问树对当前节点下的子节点进行遍历的操作;而当确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,判断单元306触发遍历单元303执行基于访问树对当前节点下的子节点进行遍历的操作。由于在该方案中,采用了根据根节点和第一控件叶子节点列表建立访问树,使得第一控件叶子节点列表中的所有节点作为该根节点的子节点,此后在获取到不同于第一控件叶子节点列表的第二控件叶子节点列表时,又可以将第二控件叶子节点列表作为跳转节点的子节点,因此,可以将多个不同的控件叶子节点列表添加到同一访问树下,从而实现对终端应用界面的所有组件进行全随机遍历的目的,相对于现有技术而言,可以减少遍历的节点数,提高遍历效率;而且,在当前树控件结构被访问动作破坏时,还可以对当前界面是否发生变化进行判断,并采用不同的处理方式来确保控件数模型和界面保持一致,因此,对当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
而且,由于在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,删除单元可以删除跳转节点,因此,可以避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),可以提高遍历效率。
进一步的,由于每次遍历节点操作后,可以对操作前后的界面进行比较,并采用不同的处理方式来避免“回路”的出现,因此,可以防止环路的发生,避免遍历进入死循环。而且,由于本方案可以随机挑选当前节点的子节点来达到随机访问的目的,因此,相对于现有技术只能按照某种特定的遍历顺序而言,显得更加灵活,而且还可以防止某个固定路径导致MTTF卡死的情况的发生。
实施例四、
相应的,本发明实施例还提供一种通信***,包括本发明实施例提供的任一种终端应用界面的测试装置,例如,具体可以如下:
终端应用界面的测试装置,用于获取当前界面的第一控件叶子节点列表;确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点;基于该访问树对当前节点下的子节点进行遍历;获取当前界面的第二控件叶子节点列表;确定该第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将该第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点(即跳转节点为触发获取所述第二控件叶子节点列表的节点)为新的当前节点;确定当前节点是否为该根节点,以及当前节点的所有子节点是否均被访问过;若当前节点不是根节点,且当前节点的所有子节点均被访问过,则确定该当前节点的父节点为新的当前节点,并返回执行基于访问树对当前节点下的子节点进行遍历的步骤;若确定当前节点为根节点,或当前节点存在有尚未被访问过的子节点,则返回执行对该访问树中的节点进行遍历的步骤。
该终端应用界面的测试装置的具体实施例可参见前面的实施例,在此不再赘述。
此外,该通信***还可以包括其他的设备,比如基站和/或服务器等设备,在此不再赘述。
由于该通信***包括本发明实施例提供的任一种终端应用界面的测试装置,因此,同样可以实现与本发明实施例提供的终端应用界面的测试装置同样的有益效果,详见前面实施例的描述,在此不再赘述。
实施例五、
相应的,本发明实施例还提供一种终端,如图4所示,该终端可以包括射频(RF,Radio Frequency)电路401、包括有一个或一个以上计算机可读存储介质的存储器402、输入单元403、显示单元404、传感器405、音频电路406、无线保真(WiFi,Wireless Fidelity)模块407、包括有一个或者一个以上处理核心的处理器408、以及电源409等部件。本领域技术人员可以理解,图4中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路401可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器408处理;另外,将涉及上行的数据发送给基站。通常,RF电路401包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM,Subscriber Identity Module)卡、收发信机、耦合器、低噪声放大器(LNA,Low Noise Amplifier)、双工器等。此外,RF电路401还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯***(GSM,Global System of Mobile communication)、通用分组无线服务(GPRS,GeneralPacket Radio Service)、码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband Code Division Multiple Access)、长期演进(LTE,Long TermEvolution)、电子邮件、短消息服务(SMS,Short Messaging Service)等。
存储器402可用于存储软件程序以及模块,处理器408通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器408和输入单元403对存储器402的访问。
输入单元403可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元403可包括触敏表面以及其他输入设备。触敏表面,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面上或在触敏表面附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器408,并能接收处理器408发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面。除了触敏表面,输入单元403还可以包括其他输入设备。具体地,其他输入设备可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元404可用于显示由用户输入的信息或提供给用户的信息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元404可包括显示面板,可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。进一步的,触敏表面可覆盖显示面板,当触敏表面检测到在其上或附近的触摸操作后,传送给处理器408以确定触摸事件的类型,随后处理器408根据触摸事件的类型在显示面板上提供相应的视觉输出。虽然在图4中,触敏表面与显示面板是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面与显示面板集成而实现输入和输出功能。
终端还可包括至少一种传感器405,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板的亮度,接近传感器可在终端移动到耳边时,关闭显示面板和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路406、扬声器,传声器可提供用户与终端之间的音频接口。音频电路406可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路406接收后转换为音频数据,再将音频数据输出处理器408处理后,经RF电路401以发送给比如另一终端,或者将音频数据输出至存储器402以便进一步处理。音频电路406还可能包括耳塞插孔,以提供外设耳机与终端的通信。
WiFi属于短距离无线传输技术,终端通过WiFi模块407可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图4示出了WiFi模块407,但是可以理解的是,其并不属于终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器408是终端的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行终端的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器408可包括一个或多个处理核心;优选的,处理器408可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器408中。
终端还包括给各个部件供电的电源409(比如电池),优选的,电源可以通过电源管理***与处理器408逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源409还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端中的处理器408会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器408来运行存储在存储器402中的应用程序,从而实现各种功能:
尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端的显示单元是触摸屏显示器,终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行述一个或者一个以上程序包含用于进行以下操作的指令:
获取当前界面的第一控件叶子节点列表;确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点;基于该访问树对当前节点下的子节点进行遍历;获取当前界面的第二控件叶子节点列表;确定该第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将该第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定该跳转节点(即跳转节点为触发获取所述第二控件叶子节点列表的节点)为新的当前节点;确定当前节点是否为该根节点,以及当前节点的所有子节点是否均被访问过;若当前节点不是根节点,且当前节点的所有子节点均被访问过,则确定该当前节点的父节点为新的当前节点,并返回执行基于访问树对当前节点下的子节点进行遍历的步骤;若确定当前节点为根节点,或当前节点存在有尚未被访问过的子节点,则返回执行对该访问树中的节点进行遍历的步骤。
其中,步骤“基于所述访问树对当前节点下的子节点进行遍历”具体可以如下:
确定该根节点还存在尚未访问的子节点时,从尚未访问的子节点中获取一个子节点,作为测试节点,对该测试节点进行测试,并在测试完毕将该测试节点标识为已经访问,例如,具体可以如下:
将该测试节点的哈希码值设定为第一码值,其中,第一码值用于标识当前界面的特性;对该测试节点进行预置操作,并在操作完毕将该测试节点标识为已经访问。
此时,可选的,还可以将当前节点下尚未访问的子节点数目减1,以便对当前节点下尚未访问的子节点数目进行统计,以及也可以通过当前节点下尚未访问的子节点数目是否为0来确定根节点是否还存在尚未访问的子节点,比如,如果尚未访问的子节点数目是否为0,则表明不存在尚未访问的子节点,否则,如果尚未访问的子节点数目大于0,则表明存在尚未访问的子节点,等等。
可选的,为了防止操作后出现“回路”而形成闭环,导致遍历进入死循环,可以对是否存在“回路”进行判断,即在将该第二控件叶子节点列表添加到访问树中之前,还可以执行如下操作:
查找该跳转节点的父节点中是否存在有哈希码值相同的节点;若存在,则删除所述跳转节点,确定查找到的节点为新的当前节点,并返回执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的操作;若不存在,则返回执行将所述第二控件叶子节点列表添加到所述访问树中的操作。
此外,需说明的是,如果第二控件叶子节点列表等于该第一控件叶子节点列表,则可以直接执行“确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过”的操作。
可选的,为了提高遍历效率,避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,还可以删除该跳转节点。
以上各个操作的执行具体可参见前面的实施例,在此不再赘述。
由上可知,本实施例的终端可以获取当前界面的第一控件叶子节点列表,确定根节点,根据该根节点和第一控件叶子节点列表建立访问树,使得该第一控件叶子节点列表中的所有节点作为该根节点的子节点,并确定该根节点为当前节点,然后基于该访问树对当前节点下的子节点进行遍历,此后,获取当前界面的第二控件叶子节点列表,确定该第二控件叶子节点列表不等于第一控件叶子节点列表时,将第二控件叶子节点列表添加到访问树中,使得第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定跳转节点(跳转节点为触发获取该第二控件叶子节点列表的节点)为新的当前节点,当当前节点不是根节点,且当前节点的所有子节点均被访问过时,确定该当前节点的父节点为新的当前节点,并返回执行基于该访问树对当前节点下的子节点进行遍历的步骤;当确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,返回执行基于访问树对当前节点下的子节点进行遍历的步骤。由于在该方案中,采用了根据根节点和第一控件叶子节点列表建立访问树,使得第一控件叶子节点列表中的所有节点作为该根节点的子节点,此后在获取到不同于第一控件叶子节点列表的第二控件叶子节点列表时,又可以将第二控件叶子节点列表作为跳转节点的子节点,因此,可以将多个不同的控件叶子节点列表添加到同一访问树下,从而实现对终端应用界面的所有组件进行全随机遍历的目的,相对于现有技术而言,可以减少遍历的节点数,提高遍历效率;而且,在当前树控件结构被访问动作破坏时,还可以对当前界面是否发生变化进行判断,并采用不同的处理方式来确保控件数模型和界面保持一致,因此,对当当前树控件结构被访问动作破坏时,也不会对遍历的有效性产生影响,有利于提高测试的效率和效果。
而且,由于在确定该第二控件叶子节点列表等于第一控件叶子节点列表时,可以删除跳转节点,因此,可以避免该跳转节点后续再被访问,以及避免对某一些非功能控件进行遍历(对这些非功能控件的遍历是没有意义的),可以提高遍历效率。
进一步的,由于每次遍历节点操作后,可以对操作前后的界面进行比较,并采用不同的处理方式来避免“回路”的出现,因此,可以防止环路的发生,避免遍历进入死循环。而且,由于本方案可以随机挑选当前节点的子节点来达到随机访问的目的,因此,相对于现有技术只能按照某种特定的遍历顺序而言,显得更加灵活,而且还可以防止某个固定路径导致MTTF卡死的情况的发生。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
以上对本发明实施例所提供的一种终端应用界面的测试方法、装置和***进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (11)
1.一种终端应用界面的测试方法,其特征在于,包括:
获取当前界面的第一控件叶子节点列表;
确定根节点,根据所述根节点和所述第一控件叶子节点列表建立访问树,使得所述第一控件叶子节点列表中的所有节点作为所述根节点的子节点,并确定所述根节点为当前节点;
确定所述根节点还存在尚未访问的子节点时,从尚未访问的子节点中获取一个子节点,作为测试节点;
对所述测试节点进行测试,并在测试完毕将所述测试节点标识为已经访问;
获取当前界面的第二控件叶子节点列表;
确定所述第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将所述第二控件叶子节点列表添加到所述访问树中,使得所述第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定所述跳转节点为新的当前节点,所述跳转节点为触发获取所述第二控件叶子节点列表的节点;
确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过;
若当前节点不是所述根节点,且当前节点的所有子节点均被访问过,则确定所述当前节点的父节点为新的当前节点,并返回执行基于所述访问树对当前节点下的子节点进行遍历的步骤;
若确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点,则返回执行基于所述访问树对当前节点下的子节点进行遍历的步骤。
2.根据权利要求1所述的方法,其特征在于,所述对所述测试节点进行测试,并在测试完毕将所述测试节点标识为已经访问,包括:
将所述测试节点的哈希码值设定为第一码值,所述第一码值用于标识当前界面的特性;
对所述测试节点进行预置操作,并在操作完毕将所述测试节点标识为已经访问。
3.根据权利要求2所述的方法,其特征在于,所述将所述第二控件叶子节点列表添加到所述访问树中之前,还包括:
查找所述跳转节点的父节点中是否存在有哈希码值相同的节点;
若存在,则删除所述跳转节点,确定查找到的节点为新的当前节点,并返回执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的步骤;
若不存在,则返回执行将所述第二控件叶子节点列表添加到所述访问树中的步骤。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述获取当前界面的第二控件叶子节点列表之后,还包括:
若所述第二控件叶子节点列表等于所述第一控件叶子节点列表,则执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的步骤。
5.根据权利要求4所述的方法,其特征在于,所述返回执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的步骤之前,还包括:
删除所述跳转节点。
6.一种终端应用界面的测试装置,其特征在于,包括:
第一获取单元,用于获取当前界面的第一控件叶子节点列表;
建立单元,用于确定根节点,根据所述根节点和所述第一控件叶子节点列表建立访问树,使得所述第一控件叶子节点列表中的所有节点作为所述根节点的子节点,并确定所述根节点为当前节点;
遍历单元,用于基于所述访问树对当前节点下的子节点进行遍历,所述遍历单元包括节点获取子单元和测试子单元;
节点获取子单元,用于确定所述根节点还存在尚未访问的子节点时,从尚未访问的子节点中获取一个子节点,作为测试节点;
测试子单元,用于对所述测试节点进行测试,并在测试完毕将所述测试节点标识为已经访问;
第二获取单元,用于获取当前界面的第二控件叶子节点列表;
添加单元,用于确定所述第二控件叶子节点列表不等于所述第一控件叶子节点列表时,将所述第二控件叶子节点列表添加到所述访问树中,使得所述第二控件叶子节点列表的所有节点作为跳转节点的子节点,并确定所述跳转节点为当前节点,所述跳转节点为触发获取所述第二控件叶子节点列表的节点;
判断单元,用于确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过,确定当前节点为所述根节点,或当前节点存在有尚未被访问过的子节点时,触发遍历单元返回执行基于所述访问树对当前节点下的子节点进行遍历的操作;
处理单元,用于在判断单元确定当前节点不是所述根节点,且当前节点的所有子节点均被访问过时,确定所述当前节点的父节点为新的当前节点,并触发遍历单元执行基于所述访问树对当前节点下的子节点进行遍历的操作。
7.根据权利要求6所述的终端应用界面的测试装置,其特征在于,
所述测试子单元,具体用于将所述测试节点的哈希码值设定为第一码值,所述第一码值用于标识当前界面的特性;对所述测试节点进行预置操作,并在操作完毕将所述测试节点标识为已经访问。
8.根据权利要求7所述的终端应用界面的测试装置,其特征在于,还包括第三处理单元;
第三处理单元,用于查找所述跳转节点的父节点中是否存在有哈希码值相同的节点;若存在,则删除所述跳转节点,确定查找到的节点为新的当前节点,并触发判断单元执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的操作;若不存在,则触发添加单元执行将所述第二控件叶子节点列表添加到所述访问树中的操作。
9.根据权利要求6至8任一项所述的终端应用界面的测试装置,其特征在于,
所述判断单元,还用于在确定所述第二控件叶子节点列表等于所述第一控件叶子节点列表时,执行确定当前节点是否为所述根节点,以及当前节点的所有子节点是否均被访问过的操作。
10.根据权利要求9所述的终端应用界面的测试装置,其特征在于,还包括删除单元;
删除单元,用于在在确定所述第二控件叶子节点列表等于所述第一控件叶子节点列表时,删除所述跳转节点。
11.一种通信***,其特征在于,包括权利要求6至10任一项所述的终端应用界面的测试装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310507853.XA CN104572430B (zh) | 2013-10-24 | 2013-10-24 | 一种终端应用界面的测试方法、装置和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310507853.XA CN104572430B (zh) | 2013-10-24 | 2013-10-24 | 一种终端应用界面的测试方法、装置和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572430A CN104572430A (zh) | 2015-04-29 |
CN104572430B true CN104572430B (zh) | 2018-04-27 |
Family
ID=53088564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310507853.XA Active CN104572430B (zh) | 2013-10-24 | 2013-10-24 | 一种终端应用界面的测试方法、装置和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572430B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281977B (zh) * | 2015-10-21 | 2018-04-03 | 北京软件产品质量检测检验中心 | 一种基于二叉树算法的智能性能测试方法及*** |
CN105868105B (zh) * | 2016-03-24 | 2019-03-15 | 厦门美图移动科技有限公司 | 一种应用遍历测试方法、设备及移动终端 |
CN105630686B (zh) * | 2016-03-24 | 2018-12-18 | 厦门美图移动科技有限公司 | 一种应用遍历测试方法、设备和移动终端 |
CN105790929B (zh) * | 2016-04-19 | 2018-12-28 | 清华大学 | 一种基于规则冗余消除的加密环境中访问控制方法 |
CN107515821B (zh) * | 2016-06-17 | 2021-08-31 | 百度在线网络技术(北京)有限公司 | 控件测试方法和装置 |
CN106294123B (zh) * | 2016-07-22 | 2018-12-18 | 厦门美图移动科技有限公司 | 一种遍历测试中路径匹配的方法、装置及移动终端 |
CN106294152B (zh) * | 2016-08-09 | 2019-03-12 | 努比亚技术有限公司 | 应用用户界面的遍历测试装置及方法 |
CN108009078B (zh) * | 2016-11-01 | 2021-04-27 | 腾讯科技(深圳)有限公司 | 一种应用界面遍历方法、***和测试设备 |
CN109783343A (zh) * | 2017-11-13 | 2019-05-21 | 北京嘀嘀无限科技发展有限公司 | 控件测试方法、装置、客户端设备和计算机可读存储介质 |
CN110737578A (zh) * | 2018-07-20 | 2020-01-31 | 北京奇虎科技有限公司 | 一种测试应用方法和装置 |
CN109558321B (zh) * | 2018-11-29 | 2022-03-18 | 北京远特科技股份有限公司 | Android设备测试方法及装置 |
CN111123888B (zh) * | 2019-12-19 | 2022-03-15 | 江苏中天互联科技有限公司 | 一种工控协议测试方法、***及电子设备和存储介质 |
CN111522548B (zh) * | 2020-03-24 | 2023-06-27 | 北京三快在线科技有限公司 | 项目功能扩展方法、装置、电子设备和计算机可读介质 |
CN111694754B (zh) * | 2020-07-30 | 2023-04-07 | 抖音视界有限公司 | 应用程序的测试方法、装置、电子设备及计算机介质 |
CN112511434A (zh) * | 2020-11-25 | 2021-03-16 | 广州技象科技有限公司 | 物联网节点接入路径规划方法、装置、设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1719786A (zh) * | 2004-07-08 | 2006-01-11 | 中兴通讯股份有限公司 | 数据通讯设备命令行接口命令的自动测试***及测试方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及*** |
CN101334728A (zh) * | 2008-07-28 | 2008-12-31 | 北京航空航天大学 | 一种基于xml文档描述的界面生成方法和平台 |
CN101350020A (zh) * | 2008-07-29 | 2009-01-21 | 北京中星微电子有限公司 | 一种嵌入式文件***的验证方法、装置和*** |
CN101403967A (zh) * | 2008-11-12 | 2009-04-08 | 恒生电子股份有限公司 | 界面保存和显示方法、客户端和服务器 |
CN102299966A (zh) * | 2011-09-06 | 2011-12-28 | 深圳中兴力维技术有限公司 | 一种在web客户端加载大数据量的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7543278B2 (en) * | 2004-10-15 | 2009-06-02 | Microsoft Corporation | System and method for making a user interface element visible |
-
2013
- 2013-10-24 CN CN201310507853.XA patent/CN104572430B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1719786A (zh) * | 2004-07-08 | 2006-01-11 | 中兴通讯股份有限公司 | 数据通讯设备命令行接口命令的自动测试***及测试方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及*** |
CN101334728A (zh) * | 2008-07-28 | 2008-12-31 | 北京航空航天大学 | 一种基于xml文档描述的界面生成方法和平台 |
CN101350020A (zh) * | 2008-07-29 | 2009-01-21 | 北京中星微电子有限公司 | 一种嵌入式文件***的验证方法、装置和*** |
CN101403967A (zh) * | 2008-11-12 | 2009-04-08 | 恒生电子股份有限公司 | 界面保存和显示方法、客户端和服务器 |
CN102299966A (zh) * | 2011-09-06 | 2011-12-28 | 深圳中兴力维技术有限公司 | 一种在web客户端加载大数据量的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104572430A (zh) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104572430B (zh) | 一种终端应用界面的测试方法、装置和*** | |
CN105320598B (zh) | 软件测试方法及装置 | |
CN105490919B (zh) | 消息撤回方法和装置 | |
CN104519485B (zh) | 一种终端之间的通信方法、装置和*** | |
CN107357725B (zh) | 应用测试方法及装置 | |
CN104636047B (zh) | 对列表中的对象进行操作的方法、装置及触屏终端 | |
CN106778585A (zh) | 一种人脸关键点跟踪方法和装置 | |
CN104281600B (zh) | 智能选词的方法和装置 | |
CN103310004A (zh) | 未读消息数目显示方法、装置和设备 | |
CN105022552A (zh) | 一种显示消息列表的方法和装置 | |
CN104281394A (zh) | 智能选词的方法和装置 | |
CN106454976B (zh) | 一种无线网络的切换方法、装置及终端 | |
CN110058850A (zh) | 一种应用的开发方法、装置以及存储介质 | |
CN105847325A (zh) | 应用客户端的调试方法及装置 | |
CN104346368A (zh) | 室内场景切换显示方法、装置和移动终端 | |
CN107219951A (zh) | 触控屏控制方法、装置、存储介质及终端设备 | |
CN107276602A (zh) | 射频干扰处理方法、装置、存储介质及终端 | |
CN106714278A (zh) | 连接无线热点的方法及装置 | |
CN106713608A (zh) | 应用的功能状态修改方法、装置及终端 | |
CN105739839B (zh) | 多媒体菜单项的选择方法及装置 | |
CN110046497A (zh) | 一种函数挂钩实现方法、装置和存储介质 | |
CN105955597A (zh) | 信息显示方法及装置 | |
CN103399706B (zh) | 页面交互方法、装置及终端 | |
CN104699501A (zh) | 一种运行应用程序的方法及装置 | |
CN106506815A (zh) | 一种应用的启用方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |