CN109086204A - 节点关系树建立、页面标记和识别方法、装置和存储介质 - Google Patents

节点关系树建立、页面标记和识别方法、装置和存储介质 Download PDF

Info

Publication number
CN109086204A
CN109086204A CN201810806228.8A CN201810806228A CN109086204A CN 109086204 A CN109086204 A CN 109086204A CN 201810806228 A CN201810806228 A CN 201810806228A CN 109086204 A CN109086204 A CN 109086204A
Authority
CN
China
Prior art keywords
node
page
tree
attribute
path
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.)
Granted
Application number
CN201810806228.8A
Other languages
English (en)
Other versions
CN109086204B (zh
Inventor
邵翔宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Xiaomi Mobile Software Co Ltd
Original Assignee
Beijing Xiaomi Mobile Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Xiaomi Mobile Software Co Ltd filed Critical Beijing Xiaomi Mobile Software Co Ltd
Priority to CN201810806228.8A priority Critical patent/CN109086204B/zh
Publication of CN109086204A publication Critical patent/CN109086204A/zh
Application granted granted Critical
Publication of CN109086204B publication Critical patent/CN109086204B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本公开涉及一种节点关系树建立、页面标记和识别方法、装置和存储介质,用以解决相关技术中页面测试效率不高的技术问题。其中,节点关系树的建立方法包括:通过UiAutomator工具捕获页面的控件,得到控件树信息;调用所述UiAutomator工具的dumpWindowHierarchy函数将所述控件树信息保存到XML文件中;根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。

Description

节点关系树建立、页面标记和识别方法、装置和存储介质
技术领域
本公开涉及应用程序页面测试领域,具体地,涉及一种节点关系树建立、页面标记和识别方法、装置和存储介质。
背景技术
目前,安卓应用程序APP的UI(User Interface,用户界面)测试领域中,通常是利用谷歌官方提供的用户界面自动化测试工具UiAutomator捕获页面控件,并基于得到的控件树信息对页面进行测试,即遍历每一页面,获取每一页面的节点以及节点属性。
具体地,在使用UiAutomator工具捕获控件时,控件树中的节点会绑定到一个特定的视图实例,当离开某一页面时,该页面特定的视图实例会销毁,相应的控件树也会被销毁,从该控件树获取的节点会过时,导致节点的属性信息无法再被获取到,并且节点也不能再被操作,若想要重新获取节点及节点属性,需要使用UiAutomator提供的控件捕获方法重新获取控件。
发明内容
本公开的主要目的是提供一种节点关系树建立、页面标记和识别方法、装置和存储介质,用以解决相关技术中页面测试效率不高的技术问题。
为了实现上述目的,本公开实施例的第一方面提供一种节点关系树建立方法,所述方法包括:
通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
可选地,所述根据所述XML文件,建立所述页面的节点关系树,包括:
遍历所述控件树的每一节点,依次创建节点关系树的节点;
根据所述控件树中的节点之间的父子关系给所述节点关系树中的每个节点添加父节点的身份标识ID属性信息和所有子节点的ID属性信息;
将所述控件树每一节点的部分或者全部属性信息赋值给所述节点关系树中对应的节点。
可选地,所述节点关系树包括每一节点的以下至少一种属性:
资源标识resource-id属性、类名class属性、包名package属性、内容描述content-desc属性、是否可选checkable属性、是否被选中checked属性、是否可点击clickable属性、是否可用enabled属性、是否可获得焦点focusable属性、是否已经获得焦点focused属性、是否可以滑动scrollable属性、是否可以长按long-clickable属性、输入内容是否隐藏password属性、单选项是否被选中selected属性、索引index属性、边界bounds属性、文本text属性。
可选地,所述节点关系树包括每一节点的边界bounds属性,所述方法还包括:
根据所述节点关系树中的每一节点的bounds属性,获取该节点的坐标信息,并存储每一节点的坐标信息,所述坐标信息用于模拟对所述节点进行的点击操作。
本公开实施例第二方面提供一种页面标记方法,所述方法包括:
获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据第一方面所述的方法建立的,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径经过的节点中不包括重复的节点;
生成获取到的每一所述节点路径的唯一标识;
将每一所述唯一标识联合作为所述目标页面的标识信息。
可选地,所述获取目标页面的节点关系树中从根节点到叶子节点的节点路径包括:
获取所述目标页面的节点关系树中从根节点到每一满足预设条件的叶子节点的路径。
可选地,所述生成获取到的每一所述节点路径的唯一标识,包括:
利用所述节点路径上的每一节点的以下至少一种属性标记所述节点路径:resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性;
对所述目标页面的所有节点路径的标记进行简化处理,得到每一所述节点路径的唯一标识。
可选地,所述对所述目标页面的所有节点路径的标记进行简化处理,得到每一所述节点路径的唯一标识,包括:
将所有所述节点路径的标记依次写入同一文档,并将每一所述节点路径的标记在所述文档中占用的行号作为所述节点路径的唯一标识,其中,在将任一所述节点路径的标记写入所述文档之前还包括:确定所述文档中不存在与该节点路径的标记相同的标记。
可选地,所述方法还包括:将所述目标页面的标识信息,页面截图以及用于生成所述节点关系树的XML文件存储到同一文件夹。
本公开实施例第三方面提供一种页面识别的方法,所述方法包括:
在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树;并
从所述节点关系树中获取目标类节点属性的值为预定值的节点集合,其中,所述节点关系树是根据第一方面所述的方法建立的。
可选地,所述从所述节点关系树中获取目标类节点属性的值为预定值的节点集合,包括:
获取resource-id属性的值为预定值的第一节点集合以及所述第一节点集合中每一节点的全部属性信息;或者,
获取text属性的值为预定值的第二节点集合以及所述第二节点集合中每一节点的全部属性信息;或者,
获取id属性的值为预定值的第三节点集合以及所述第三节点集合中每一节点的全部属性信息;或者,
获取子孙节点的text属性的值为预定值的第四节点集合以及所述第四节点集合中每一节点的全部属性信息;或者,
获取class属性的值为预定值的第五节点集合以及所述第五节点集合中每一节点的全部属性信息。
可选地,所述每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树包括:
按照所述测试路径,每进入到所述应用程序的一页面,获取该页面的标识信息,所述测试路径包括待测试的每一页面的标识信息,所述应用程序每一页面的标识信息是根据第二方面所述的页面标记方法得到的;
若所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致,则查找该页面对应的节点关系树。
可选地,所述页面测试为应用程序页面遍历测试,所述方法还包括:
每识别出一个页面,将该页面标记为已识别页面;
确定未被识别的页面集合,基于预先建立的页面关系图获取进入所述未被识别的页面集合中的下一个待识别页面的所有路径,并根据每一所述路径进入所述目标页面执行遍历。
可选地,所述节点关系树存储有每一节点的坐标信息,所述方法还包括:
在所述页面测试过程中,针对所述页面的可点击节点,根据该可点击节点的坐标信息模拟对所述可点击节点进行的点击操作。
本公开实施例第三方面提供一种节点关系树建立装置,包括:
控件捕获模块,被配置为通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用模块,被配置为调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
建立模块,被配置为根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储模块,被配置为存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
可选地,所述建立模块包括:
节点创建子模块,被配置为遍历所述控件树的每一节点,依次创建节点关系树的节点,并为根据所述控件树中的节点之间的父子关系给所述节点关系树中的每个节点添加父节点的ID属性信息和所有子节点的ID属性信息;
属性创建子模块,被配置为将所述控件树每一节点的全部或者部分属性信息赋值给所述节点关系树中对应的节点。
可选地,所述节点关系树包括每一节点的以下至少一种属性:
resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性、text属性。
可选地,所述装置还包括:
节点坐标获取模块,被配置为根据所述节点关系树中每一节点的bounds属性,获取该节点的坐标信息;
节点坐标存储模块,被配置为存储每一节点的坐标信息,所述坐标信息用于模拟对所述节点进行的点击操作。
本公开实施例第五方面提供一种页面标记装置,所述装置包括:
获取模块,被配置为获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据第一方面所述的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成模块,被配置为生成获取到的每一所述节点路径的唯一标识;
页面标记模块,被配置为将每一所述唯一标识联合作为所述目标页面的标识信息。
可选地,所述获取模块被配置为:
获取所述目标页面的节点关系树中从根节点到每一满足预设条件的叶子节点的路径。
可选地,所述生成模块包括:
路径标记模块,被配置为利用所述节点路径上的每一节点的以下至少一种属性标记所述节点路径:resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性;
生成子模块,被配置为对所述目标页面的所有节点路径的标记进行简化处理,得到每一所述节点路径的唯一标识。
可选地,所述生成子模块被配置为:
将所有所述节点路径的标记依次写入同一文档,并将每一所述节点路径的标记在所述文档中占用的行号作为所述节点路径的唯一标识,其中,在将任一所述节点路径的标记写入所述文档之前还包括:确定所述文档中不存在与该节点路径的标记相同的标记。
可选地,所述装置还包括:
存储模块,被配置为将所述目标页面的标识信息,页面截图以及用于生成所述节点关系树的XML文件存储到同一文件夹。
本公开实施例第六方面提供一种页面识别的装置,所述装置包括:
查找模块,被配置为在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树,其中,所述节点关系树是根据第一方面所述的方法建立的;
识别模块,被配置为从所述节点关系树中获取目标类节点属性的值为预定值的节点集合。
可选地,所述识别模块被配置为:
获取resource-id属性的值为预定值的第一节点集合以及所述第一节点集合中每一节点的全部属性信息;或者,
获取text属性的值为预定值的第二节点集合以及所述第二节点集合中每一节点的全部属性信息;或者,
获取id属性的值为预定值的第三节点集合以及所述第三节点集合中每一节点的全部属性信息;或者,
获取子孙节点的text属性的值为预定值的第四节点集合以及所述第四节点集合中每一节点的全部属性信息;或者,
获取class属性的值为预定值的第五节点集合以及所述第五节点集合中每一节点的全部属性信息。
可选地,所述查找模块包括:
获取子模块,被配置为按照所述测试路径,每进入到所述应用程序的一页面,获取该页面的标识信息,所述测试路径包括待测试的每一页面的标识信息,所述应用程序每一页面的标识信息是根据第二方面所述的页面标记方法得到的;
查找子模块,被配置为在所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致时,查找该页面对应的节点关系树。
可选地,所述页面测试为应用程序页面遍历测试,所述装置还包括:
标记模块,被配置为每识别出一个页面,将该页面标记为已识别页面;
遍历路径规划模块,被配置为确定未被识别的页面集合,基于预先建立的页面关系图获取进入所述未被识别的页面集合中的下一个待识别页面的所有路径,并根据每一所述路径进入所述目标页面执行遍历。
可选地,所述装置还包括:
操作模拟模块,被配置为在所述页面测试过程中,针对所述页面的可点击节点,根据该可点击节点的坐标信息模拟对所述可点击节点进行的点击操作,其中,所述节点关系树存储有每一节点的坐标信息。
本公开实施例第七方面提供一种节点关系树建立装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
本公开实施例第八方面提供一种页面标记装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据第一方面所述的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成获取到的每一所述节点路径的唯一标识;
将每一所述唯一标识联合作为所述目标页面的标识信息。
本公开实施例第九方面提供一种页面识别装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树;并
从所述节点关系树中获取目标类节点属性的值为预定值的节点集合,其中,所述节点关系树是根据第一方面所述的方法建立的。
本公开实施例第十方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述方法的步骤。
本公开实施例第十一方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第二方面所述方法的步骤。
本公开实施例第十二方面提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第三方面所述方法的步骤。
采用上述技术方案,至少可以达到如下技术效果:
通过建立与控件树一致的节点关系树,使得该节点关系树脱离UiAutomator工具节点捕获机制的限制,能够在页面测试过程中始终保持可实时获取的状态。这样,在页面测试过程中,多次获取同一页面的节点以及节点属性所需要的时间减少,并且,相比现有技术中前后两次从控件树获取节点以及节点属性之间需要休眠一定时长,本公开提供的技术方案从节点关系树获取节点以及节点属性无需休眠,进一步提高了效率,且能保证获取到的值不为空,从而提升了页面测试的稳定性。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是本公开一示例性实施例提供的一种建立应用程序页面的节点关系树的方法的流程示意图;
图2是本公开一示例性实施例提供的一种遍历控件树建立节点关系树的方法的流程示意图;
图3是本公开一示例性实施例提供的应用程序页面的一种页面标记方法的流程示意图;
图4是本公开一示例性实施例提供的一种节点关系树的示意图;
图5是本公开一示例性实施例提供的另一种页面标记方法的流程示意图;
图6是本公开一示例性实施例提供的应用程序页面的一种页面识别方法的流程示意图;
图7是本公开一示例性实施例提供的应用程序的一种页面关系示意图;
图8是本公开一示例性实施例提供的一种节点关系树建立装置的结构示意图;
图9是本公开一示例性实施例提供的一种页面标记装置的结构示意图;
图10是本公开一示例性实施例提供的一种页面识别装置的结构示意图;
图11是本公开一示例性实施例提供的一种电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
为了使本领域普通技术人员能够更容易理解本公开实施例提供的技术方案,下面首先对涉及到的相关知识就行简单介绍。
图1是根据一示例性实施例示出的应用程序页面的一种节点关系树建立方法的流程图,如图1所示,该方法包括:
S101、通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息。
S102、调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中。
在具体实施时,也可以将控件树信息保存为其他格式的文件,例如,JSON(JavaScript Object Notation,JS对象标记)格式。由于现有dumpWindowHierarchy函数支持保存为XML(Extensible Markup Language,可扩展标记语言)格式的文件,因此,本公开实施例以保存为XML文件的控件树信息进行说明。
S103、根据所述XML文件,建立所述页面的节点关系树。
其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息。
在具体实施时,该节点关系树可以包括控件树的所有节点,或者根据实际测试需求,该节点关系树也可以包括控件树上指定的部分节点。并且,节点关系树中存在的节点之间的父子关系与控件树上对应的节点之间的父子关系相同,即具有相同的树状结构。另外,针对每一节点的属性信息,该节点关系树的每一节点可以拥有控件树上对应节点的全部属性信息,也可以是拥有控件树上对应节点的部分属性信息,例如,将测试过程中需要使用到的典型属性赋值给节点关系树的节点。
S104、存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
值得说明的是,若基于现有的从控件树中获取节点以及节点属性的流程,针对同一页面,每从控件树获取一次节点及节点属性花费的时间为T秒,则从控件树获取n次该页面的节点及节点属性需花费n*T秒。而采用上述方法建立的节点关系树,由于其可以实时获取,从节点关系树获取节点及节点属性的时间可以忽略不计,只需花费从控件树获取节点及节点属性建立节点关系树的时间,即T秒。因此,在需要多次获取应用程序同一页面的节点及节点属性的情况下,采用本公开实施例提供的方法建立的节点关系树,可以提高节点及节点属性获取效率。以N次获取为例,N大于1,采用本公开实施例建立的节点关系树,针对同一页面获取N次节点及节点属性的效率是现有技术的N倍。
另外,从控件树获取节点以及节点属性之后,如果不休眠一定时长,则再次从控件树获取节点及节点属性可能为NULL,而从本公开实施例建立的节点关系树获取节点以及节点属性无需休眠,进一步提升了获取效率(实验证明连续获取两次节点及节点属性的时间是现有技术的0.9倍),并且能保证获取到的值不为NULL,提升了页面测试的稳定性。
下面具体说明如何基于控件树建立页面的节点关系树,可选地,本公开实施例可以通过遍历所述控件树的每一节点的方式,依次创建节点关系树的节点。并且,根据所述控件树中的节点之间的父子关系给所述节点关系树中的每个节点添加父节点的ID属性信息和所有子节点的ID属性信息,并将所述控件树每一节点的部分或者全部属性信息赋值给所述节点关系树中对应的节点,得到页面的节点关系树。
具体地,可以将控件树节点的如下属性信息中的全部或者部分赋值给节点关系树对应的节点:
资源标识resource-id属性、类名class属性、包名package属性、内容描述content-desc属性、是否可选checkable属性、复选项是否被选中checked属性、是否可点击clickable属性、是否可用enabled属性、是否可获得焦点focusable属性、是否已经获得焦点focused属性、是否可以滑动scrollable属性、是否可以长按long-clickable属性、输入内容是否隐藏password属性、单选项是否被选中selected属性、索引index属性、边界bounds属性、文本text属性。
示例地,以上述属性信息为例,对节点关系树的建立方法进行详细说明。如图2所示,本公开一示例性实施例提供的一种遍历控件树建立节点关系树的方法,包括:
S201、创建页面节点关系树的根节点并将该节点关系树的根节点的ID属性的值设置为0,并添加该节点关系树的根节点到存放页面节点关系树中的所有节点以及所有节点信息的目标集合中。
其中,该目标集合是预先创建的。
S202、把页面控件树的根节点作为当前正在被遍历的页面控件树中的目标控件节点,把节点关系树的根节点的ID属性的值作为在节点关系树中的且与该目标控件节点相对应的节点的目标ID值,并执行步骤S203。
S203、判断当前的目标控件节点在页面控件树中是否存在未被遍历过的子节点。
如果当前正在被遍历的页面控件树中的目标控件节点的所有子节点都已经被遍历,则执行步骤S204;否则,执行步骤S206。
S204、判断当前的目标控件节点是否存在上一个被遍历节点。
如果当前的目标控件节点存在上一个被遍历节点,则执行步骤S205。否则,页面节点关系树生成完毕,即页面节点关系树中所有的节点以及节点信息都已经存储在了目标集合中了。
S205、令当前的目标控件节点的上一个被遍历节点为新的目标控件节点,并返回执行步骤S203。
S206、确定当前的目标控件节点的第一个未被遍历过的子节点。
值得说明的是,假设当前的目标控件节点有三个子节点,其中第一个子节点已经被遍历过了,第二个、第三个子节点未被遍历过,那么第一个未被遍历过的子节点指的是该目标控件节点的第二个子节点。
S207、判断当前的目标控件节点的第一个未被遍历过的子节点的类型是否为元素类型。
如果当前的目标控件节点的第一个未被遍历过的子节点的类型不为元素类型,则执行步骤S208,否则执行步骤S203。
S208、把当前的目标控件节点的第一个未被遍历过的子节点从节点类型强制转换为元素类型。
即把当前正在被遍历的页面控件树中的节点的第一个未被遍历过的子节点强制转换为当前正在被遍历的页面控件树中的节点的第一个未被遍历过的子元素。
S209、在节点关系树中创建与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点。
S210、令目标ID值=目标ID值+1,并将在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的ID属性的值设置为该目标ID值。
S211、把在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的父节点ID属性的值设置为在节点关系树中的与当前的目标控件节点相对应的节点的ID值。
S212、把在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的index属性的值设置为当前的目标控件节点的第一个未被遍历过的子元素的index属性的值。
S213、把在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的content-desc属性的值设置为当前的目标控件节点的第一个未被遍历过的子元素的content-desc属性的值。
S214、把在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的bounds属性的值设置为当前的目标控件节点的第一个未被遍历过的子元素的bounds属性的值。
同理,参照步骤S212至步骤S214,针对当前的目标控件节点的第一个未被遍历过的子节点的其他节点属性信息,也可以采用相同的方式赋值给节点关系树中对应的节点。此处不再一一列举。
S215、将在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点添加到目标集合中。
S216、将目标集合中与当前的目标控件节点对应的节点作为在节点关系树中的且当前正在被添加子节点ID的节点。
S217、将在节点关系树中的且与当前的目标控件节点的第一个未被遍历过的子节点相对应的节点的ID属性的值添加到在节点关系树中的且当前正在被添加子节点ID的节点的存储子节点ID的集合属性中。
S218、将当前的目标控件节点的第一个未被遍历过的子节点标记为最新已遍历,并判断当前的目标控件节点最新已遍历的该子节点是否有子节点。
如果有,则执行步骤S219;如果没有,则执行步骤S203。
S219、把当前的目标控件节点最新已遍历的该子节点作为新的目标控件节点,把节点关系树中对应当前的目标控件节点最新已遍历的该子节点的ID属性的值作为新的目标ID值,并执行S203。
其中,目标控件节点的最新已遍历节点是变化的,每次该目标控件节点的第一个未被遍历的子节点被遍历后,标记为最新已遍历节点,并且该目标控件节点的下一个未被遍历的子节点成为该目标控件节点的第一个未被遍历的子节点。
值得说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本公开所必须的。
另外,参照上述步骤S214,在将控件树节点的bounds属性赋值给节点关系树上对应的节点后,还可以根据所述节点关系树中每一节点的bounds属性,获取该节点的坐标信息,并存储每一节点的坐标信息,所述坐标信息用于在页面测试时,模拟对所述节点进行的点击操作。确保了在不使用控件树节点直接调用自己的click方法的情况下,页面测试的正确进行。
图3是根据一示例性实施例示出的应用程序页面的一种页面标记方法的流程图,如图3所示,该方法包括:
S301、获取目标页面的节点关系树中从根节点到叶子节点的节点路径,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点。
值得说明的是,该节点关系树是根据图1或图2所示的方法实施例针对应用程序每一页面建立的节点关系树。
S302、生成获取到的每一所述节点路径的唯一标识。
S303、将每一所述唯一标识联合作为所述目标页面的标识信息。
下面以图4所示的节点关系树为例,对上述步骤进行详细说明。如图4所示,节点关系树中包括1至12个节点,其中,节点1为根节点,节点5,6,8,10,11,12没有子节点,因此作为叶子节点。从节点关系树的根节点到叶子节点的节点路径即是指从节点1出发,经过两两节点间路径最终到达任一叶子节点的路径。也就是说,该节点路径经过的节点中不包括重复的节点,且其首节点是根节点,尾节点是叶子节点,且该节点路径有且仅有一个根节点以及叶子节点。这样,图4所示的节点路径包括:
节点1—>节点2—>节点5;
节点1—>节点3—>节点6;
节点1—>节点4—>节点7—>节点8;
节点1—>节点4—>节点7—>节点9—>节点12;
节点1—>节点4—>节点7—>节点10;
节点1—>节点4—>节点7—>节点11。
可选地,在具体实施时可以指定获取部分节点路径,例如获取所述目标页面的节点关系树中从根节点到每一满足预设条件的叶子节点的路径。该预设条件可以根据实际需求设定,例如满足预设条件的叶子节点可以是不包含包名为"com.android.systemui"的叶子节点,本公开对此不做限定。
进一步地,步骤S302中生成获取到的每一节点路径的唯一标识可以通过多种方式实现。例如,可以利用所述节点路径上的每一节点的以下至少一种属性标记所述节点路径:resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性。
示例地,每个节点路径的标识的格式为:
路径的第一个节点的resource-id属性#路径的第一个节点的class属性#路径的第一个节点的package属性#路径的第一个节点的content-desc属性#路径的第一个节点的checkable属性#路径的第一个节点的checked属性#路径的第一个节点的clickable属性#路径的第一个节点的enabled属性#路径的第一个节点的focusable属性#路径的第一个节点的focused属性#路径的第一个节点的scrollable属性#路径的第一个节点的long-clickable属性#路径的第一个节点的password属性#路径的第一个节点的selected属性#……路径的第N个节点的resource-id属性#路径的第N个节点的class属性#路径的第N个节点的package属性#路径的第N个节点的content-desc属性#路径的第N个节点的checkable属性#路径的第N个节点的checked属性#路径的第N个节点的clickable属性#路径的第N个节点的enabled属性#路径的第N个节点的focusable属性#路径的第N个节点的focused属性#路径的第N个节点的scrollable属性#路径的第N个节点的long-clickable属性#路径的第N个节点的password属性#路径的第N个节点的selected#属性。
上述只是举例说明,举例中采用了节点的全部属性信息对节点路径进行标记,在具体实施时,也可以采用部分指定的属性信息对节点路径进行标记,例如仅使用节点路径上每一节点的ID值标记该节点路径,本公开对此不做限定。
值得说明的是,使用越多的属性标记路径,不同节点路径之间的区分度越高,但是相应的路径标识的字符串就越长。因此,为了在保证不同节点路径之间的区分度的情况下,尽量减小路径标记的长度,本公开实施例可以对节点路径标记采用较短的字符串替代路径标识中较长的字符串,例如,使用“c.a”替代“com.android”等。这样,路径标识字符串长度越短,所需要存储路径标识的文件的大小就越小,进而读取和存储路径标识的效率也就越高。在具体实施时,可以根据区分度以及路径标识存储的实际需求灵活选择。
进一步地,在一种可能的实现方式中,可以将用上述属性格式的标记直接作为节点路径的唯一标识。在另一种可能的实现方式中,本公开实施例还可以对页面所有节点路径的标记进行进一步的简化,得到每一节点路径的唯一标识,以进一步降低唯一标识的字符串长度,同时建立页面节点路径的路径库,供查询以及调用节点路径的唯一标识。
示例地,在得到页面的所有节点路径的标记后,该标记例如可以是采用上述举例说明的属性格式的标记,或者是针对每一节点路径的标记进行了进一步缩减字符串操作后得到的标记,将所有节点路径的标记依次写入同一文档,并将每一节点路径的标记在该文档中占用的行号作为该节点路径的唯一标识。
具体地,在将任一节点路径的标记写入该文档之前还包括:确定该文档中不存在与该节点路径的标记相同的标记。也就是说,对于同一页面获取到的相同的节点路径,只在文档中记录一次,避免了同一节点路径在文档中具有两个行号。实现对同一页面节点路径的去重。
另外,在具体实施时,可以使得每一节点路径的标记在文档中只占用一行,这样,一个行号唯一标记一条节点路径,进一步简化了节点路径的唯一标识,提升了读取和存储路径标识的效率。
并且,该文档作为存储节点路径唯一标识的路径库,在每次准备将某一节点路径的标记写入该文档之前,先判断该文档中是否已经存在了相同的标记,如不存在,则将该节点路径标记写入文档中新的一行,若存在,则返回所述已存在的标记在该文档中的行号,以便进一步利用该页面每一节点路径在该文档中的行号作为该页面的标识信息。
具体地,针对某一个页面,将获取到的该页面所有的节点路径的唯一标识联合起来,作为该页面的标识信息。
以图4所示的页面节点关系树为例,获取到的节点路径包括根节点1分别到叶子节点5,6,8,10,11,12的节点路径,并且,节点路径:节点1—>节点2—>节点5的唯一标识为33(该唯一标识例如是该节点路径写入文档中占用的行号);节点路径:节点1—>节点3—>节点6的唯一标识为40;节点路径:节点1—>节点4—>节点7—>节点8的唯一标识为41;节点路径:节点1—>节点4—>节点7—>节点9—>节点12的唯一标识为92;节点路径:节点1—>节点4—>节点7—>节点10的唯一标识为173;节点路径:节点1—>节点4—>节点7—>节点11的唯一标识为176。则将每一节点路径的唯一标识联合起来可以是通过下划线连接起来得到页面的唯一标识信息:33_40_41_92_173_176。
上述只是举例说明,在具体实施时,还可以采用其他联合方式,例如,采用“.”连接各个节点路径的唯一标识,以减少页面唯一标识信息的字符串长度。本公开实施例对此不做限定。
可选地,在页面标记过程中,还可以将对目标页面的标识信息,页面截图以及用于生成所述节点关系树的XML文件存储到同一文件夹。这样,基于该文件夹可以人工确定页面的标识信息,页面截图以及XML文件三者是否能正确对应起来,确保页面标记无误。
值得说明的是,现有技术中对应用程序页面的标记通常采用给页面任意个节点标记特定的ID,或者给任意个节点定义类名或特定文本的方式。然而应用程序的不同页面可能存在相同的节点,这就导致不同页面可能具有相同的节点ID或者定义的类名或者文本,从而无法准确区分应用程序的不同的页面,进而导致在页面测试过程中无法准确识别页面。而采用本公开实施提供的页面标记方法,每一页面所拥有的节点关系树不同,进而利用节点关系树的节点路径生成的页面的标识信息也是唯一的,从而可以唯一识别页面。这样,在页面测试过程中,即可以准确识别某一页面是否已经被遍历,进而可以在测试过程中,重新规划进入下一个未遍历页面的所有路径,保证了需要被遍历的页面全部被遍历,保证了遍历测试的完整性,避免了现有技术中针对页面的遍历算法存在的重复遍历,遍历过程中容易跳入死循环以及节点遍历不全等问题。
下面结合节点关系树的建立方法,详细说明页面标记方法的实现过程,该过程包括运行写好的自动化测试用例,若该自动化测试用例没有一个名字为“miui_pagetag”的文件夹则创建一个,如果文件夹“miui_pagetag”下没有一个名字为“routeTagNodupDataSource.txt”的文本文件,则创建一个。并且如图5所示,在运行自动化测试用例过程中执行如下步骤:
S501、自动化测试用例在进入到需要标记的目标页面时,确定该目标页面的名字,如果“miui_pagetag”文件夹下没有以该目标页面名字命名的文件夹,则创建一个以该目标页面的名字命名的目标文件夹。
S502、把该目标页面的节点关系dumpWindowHierarchy到以该目标文件夹下的routeTagNodup.xml文件,并把该目标页面的截图保存到以该目标文件夹下的routeTagNodup.png,并在该目标文件夹下新建一个名字为routeTagNodup.txt的文本文件。
S503、根据routeTagNodup.xml生成该目标页面的节点关系树。
S504、获取该节点关系树中从根节点到满足预设条件的叶子节点的节点路径。
S505、针对每一节点路径,利用该节点路径上每一节点的属性信息标记该节点路径,得到所有节点路径的标识。
S506、对该目标页面的所有路径标识进行去重处理。
S507、把去重处理后的路径标识保存在以该目标文件夹下的routeTagNodup.txt中,每一条路径标识占用一行,并利用该目标页面的所有路径标识的行号联合表示该目标页面的标识信息。
S508、在该目标文件夹下新建一个名字为“pagetag”的文本文件“pagetag.txt”,把该目标页面的标识信息保存到该文本文件“pagetag.txt”中。
S509、判断该目标文件夹下是否有文件夹。
如果没有,则执行步骤S510;如果有,则执行步骤S511。
S510、创建一个名字为“1”的文件夹并把routeTagNodup.xml、routeTagNodup.png、routeTagNodup.txt、pagetag.txt移动到文件夹“1”下。
S511、把pagetag.txt中的页面标识信息和该目标文件夹下所有文件夹中的pagetag.txt中的页面标识信息相比较,如果不存在相同的页面标识信息,则根据该目标文件夹下已有文件夹的序号依次序创建一个新的文件夹,并把routeTagNodup.xml、routeTagNodup.png、routeTagNodup.txt、pagetag.txt移动到新创建的文件夹下。
示例地,首先确定目标文件夹下已有文件夹的最大序号,然后新建一个以该最大序号加一的名字命名的文件夹,例如该目标文件夹下已有文件夹的名字分别为“1”,“2”,“3”,则新建的文件夹的名字为“4”。
另外,如果该目标文件夹下已有文件夹中的pagetag.txt中记录的页面标识信息与该目标文件夹下的pagetag.txt中记录的页面标识信息相同,则不会创建新的文件夹。
进一步地,在运行自动化测试用例标记好全部页面后,可以人工确定“miui_pagetag”文件夹下的每一个文件夹的名字和每一个文件夹下的所有子文件夹下的界面截图是否正确对应,如果发现有错误的页面或者对应错误的页面,则可以删除该界面截图(routeTagNodup.png)的父文件夹下的所有文件以及该界面截图的父文件夹。
本公开一示例性实施例还提供一种页面识别的方法,如图6所示,该方法包括:
S601、在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树。
其中,所述节点关系树是根据图1或图2所示的方法建立的,作为测试用例,该节点关系树在页面测试过程中始终保持可实时获取的状态。
S602、从所述节点关系树中获取目标类节点属性的值为预定值的节点集合。
在应用程序的页面测试过程中,测试人员可能需要查看某一类属性值,例如resource-id属性的值,为预定值的所有节点的集合。则在具体实施时,可以针对某一类属性提供调用节点API,通过该API可以获取该类属性的值为预定值的节点集合。参照上述对页面节点关系树的说明,与通过UiAutomator工具捕获页面得到的控件树不同,该节点关系树在页面测试过程中是实时可获取的,从节点关系树获取节点以及节点属性的时间可以忽略不计,从而提高了页面测试效率。并且,从节点关系树获取节点以及节点属性无需休眠,保证了获取到的值不为NULL,进一步提升了获取效率以及页面测试的稳定性。
示例地,根据实际需求可以获取resource-id属性的值为预定值的第一节点集合以及所述第一节点集合中每一节点的全部属性信息;或者,获取text属性的值为预定值的第二节点集合以及所述第二节点集合中每一节点的全部属性信息;或者,获取id属性的值为预定值的第三节点集合以及所述第三节点集合中每一节点的全部属性信息;或者,获取子孙节点的text属性的值为预定值的第四节点集合以及所述第四节点集合中每一节点的全部属性信息;或者,获取class属性的值为预定值的第五节点集合以及所述第五节点集合中每一节点的全部属性信息。本公开对此不做限定。
下面结合具体的页面测试场景对本公开实施例提供的页面识别方法进行详细的说明。
例如,在一个实施例中,页面测试为固定了测试路径的自动化测试,所述测试路径包括待测试的每一页面的标识信息,所述应用程序每一页面的标识信息是根据图3或图5所示的页面标记方法得到的,则本公开实施例提供的页面识别方法包括:按照所述测试路径,每进入到所述应用程序的一页面,获取该页面的标识信息;并判断所述页面的标识信息是否与所述测试路径当前待测试的页面的标识信息一致;若所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致,则确定所述页面为所述测试路径中指定的待测试的页面。结合到图6所示的方法步骤中,则是在每进入到所述应用程序的一页面后,可以获取该页面的标识信息,若所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致,则查找该页面对应的节点关系树。
也就是说,在页面测试中,当进入到某一个页面时,其中,进入到某一个页面的方式包括但不仅限于滑动、点击某一坐标(对节点的点击操作可以基于节点的坐标信息模拟)、执行节点的click方法,需要确认这个页面是否为当前期望进入的页面。基于本公开实施例提供的页面标记方法得到的页面标识信息可以唯一标记页面,从而可以准确判断当前进入的页面是否为期望的页面,进而确定测试路径是否正确。另外,值得说明的是,在进入某一页面无法获取到该页面的标识信息时,还可以结合图5所示的页面标记方法对该页面进行标记,也就是说,本公开实施例提供的页面识别方法可以与上述方法实施例提供的页面标记方法相结合,使得在页面识别过程中同时可以对页面进行标记。
在一个实施例中,所述页面测试为应用程序页面遍历测试,则该页面识别方法包括:每识别出一个页面,将该页面标记为已识别页面;确定未被识别的页面集合,基于预先建立的页面关系图获取进入所述未被识别的页面集合中的下一个待识别页面的所有路径,并根据每一所述路径进入所述目标页面执行遍历。
值得说明的是,现有的应用程序页面遍历算法是对每个页面采用相同的操作规则,比如:对页面所有的按钮都执行点击操作。但是现有的页面遍历算法存在重复遍历、遍历过程中容易跳入死循环、遍历不全等问题。而在采用本公开实施例提供的页面标记方法可以准确的识别页面的基础上,在页面遍历测试过程中,每识别出一页面后,可以记录已经被遍历的页面、已经被遍历的页面控件以及已经被遍历的页面控件的操作方式,从而避免重复遍历,保证了页面遍历测试的高效性以及完整性,并且基于预先配置好的进入某一页面的多条路径,在进入死循环的路径后,可以根据配置的路径跳出死循环。
示例地,图7是本公开一示例性实施例提供的页面关系示意图,包括页面A,页面B,页面C,页面D以及页面E,以及进入每一页面的路径以及操作方式,例如,页面A进入页面E包括两条路径,第一条路径为:页面A点击控件1进入页面B,页面B点击控件5进入页面E;第二条路径为:页面A右滑控件2进入页面C,页面C点击控件4进入页面E。
这样,在页面遍历测试过程中,根据图7所示的页面关系示意图获取进入下一个未被遍历页面的所有路径,在遍历过程中,每识别出一个页面后,记录已经被遍历的页面、已经被遍历的页面控件以及已经被遍历的页面控件的操作方式,然后确定未被遍历的页面、未被遍历的页面控件以及未被遍历的页面控件的操作方式,最后一一遍历未被遍历的页面、未被遍历的页面控件以及未被遍历的页面控件的操作方式,保证了需要被遍历的页面全部被遍历。并且,如果已经选择的进入下一个未被遍历页面的路径不通,则可以识别当前所在的页面,并重新规划进入下一个未遍历页面的所有路径,例如,页面A到页面E的第一条路径不同,则可以重新规划根据第二条路径从页面A到页面E进行遍历。
值得说明的是,在页面A获取节点以及节点属性,然后从页面A离开并进入到页面B,最后再从页面B返回到页面A后,需要利用在离开页面A之前获取到的节点以及节点属性。对于现有技术来说,利用在离开页面A之前获取到的节点以及节点属性可能会抛出StaleObjectException,因为离开页面A时,控件树销毁,之前获取到的页面A的节点及节点属性失效,因此无法再对页面A执行操作。而采用本公开实施例提供的页面识别方法,页面控件树里面的全部节点以及全部节点的全部属性都可以复制到节点关系树中,并且节点关系树里面的节点以及节点属性不会丢失,因此可以正常的利用在离开页面A之前获取到的节点以及节点属性,提高了页面测试的稳定性。
基于相同的发明构思,本公开一示例性实施例还提供一种节点关系树建立装置,用于实施上述方法实施例提供的节点关系树的建立方法的步骤,如图8中的实线框所示,该节点关系树建立装置包括:
控件捕获模块801,被配置为通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用模块802,被配置为调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
建立模块803,被配置为根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储模块804,被配置为存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
可选地,如图8中的虚线框所示,所述建立模块803包括:
节点创建子模块8031,被配置为遍历所述控件树的每一节点,依次创建节点关系树的节点,并为根据所述控件树中的节点之间的父子关系给所述节点关系树中的每个节点添加父节点的ID属性信息和所有子节点的ID属性信息;
属性创建子模块8032,被配置为将所述控件树每一节点的全部或者部分属性信息赋值给所述节点关系树中对应的节点。
可选地,所述节点关系树包括每一节点的以下至少一种属性:
resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性、text属性。
可选地,如图8中的虚线框所示,所述装置还包括:
节点坐标获取模块805,被配置为根据所述节点关系树中每一节点的bounds属性,获取该节点的坐标信息;
节点坐标存储模块806,被配置为存储每一节点的坐标信息,所述坐标信息用于模拟对所述节点进行的点击操作。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开一示例性实施例还提供一种页面标记装置,用于实施上述方法实施例提供的页面标记方法的步骤,如图9中的实线框所示,所述装置包括:
获取模块901,被配置为获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据图1所示的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成模块902,被配置为生成获取到的每一所述节点路径的唯一标识;
页面标记模块903,被配置为将每一所述唯一标识联合作为所述目标页面的标识信息。
可选地,所述获取模块901用于:
获取所述目标页面的节点关系树中从根节点到每一满足预设条件的叶子节点的路径。
可选地,如图9中的虚线框所示,所述生成模块902包括:
路径标记模块9021,被配置为利用所述节点路径上的每一节点的以下至少一种属性标记所述节点路径:resource-id属性、class属性、package属性、content-desc属性、checkable属性、checked属性、clickable属性、enabled属性、focusable属性、focused属性、scrollable属性、long-clickable属性、password属性、selected属性、index属性、bounds属性;
生成子模块9022,被配置为对所述目标页面的所有节点路径的标记进行简化处理,得到每一所述节点路径的唯一标识。
可选地,所述生成子模块9022用于:
将所有所述节点路径的标记依次写入同一文档,并将每一所述节点路径的标记在所述文档中占用的行号作为所述节点路径的唯一标识,其中,在将任一所述节点路径的标记写入所述文档之前还包括:确定所述文档中不存在与该节点路径的标记相同的标记。
可选地,如图9中的虚线框所示,所述装置还包括:
存储模块904,被配置为将所述目标页面的标识信息,页面截图以及用于生成所述节点关系树的XML文件存储到同一文件夹。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开一示例性实施例还提供一种页面识别的装置,用于实施上述方法实施例提供的一种页面识别方法的步骤,如图10的实线框所示,所述装置包括:
查找模块1001,被配置为在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树。
其中,所述节点关系树与通过UiAutomator工具捕获得到的该页面的控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息,所述节点关系树在页面测试过程中始终保持可实时获取的状态。
识别模块1002,被配置为从所述节点关系树中获取目标类节点属性的值为预定值的节点集合。
可选地,所述识别模块1002被配置为:
获取resource-id属性的值为预定值的第一节点集合以及所述第一节点集合中每一节点的全部属性信息;或者,
获取text属性的值为预定值的第二节点集合以及所述第二节点集合中每一节点的全部属性信息;或者,
获取id属性的值为预定值的第三节点集合以及所述第三节点集合中每一节点的全部属性信息;或者,
获取子孙节点的text属性的值为预定值的第四节点集合以及所述第四节点集合中每一节点的全部属性信息;或者,
获取class属性的值为预定值的第五节点集合以及所述第五节点集合中每一节点的全部属性信息。
可选地,如图10中的虚线框所示,所述查找模块1001包括:
获取子模块10011,被配置为按照所述测试路径,每进入到所述应用程序的一页面,获取该页面的标识信息,所述测试路径包括待测试的每一页面的标识信息,所述应用程序每一页面的标识信息是根据第二方面所述的页面标记方法得到的;
查找子模块10012,被配置为在所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致时,查找该页面对应的节点关系树。
可选地,所述页面测试为应用程序页面遍历测试,如图10中的虚线框所示,所述装置还包括:
标记模块1003,被配置为每识别出一个页面,将该页面标记为已识别页面;
遍历路径规划模块1004,被配置为确定未被识别的页面集合,基于预先建立的页面关系图获取进入所述未被识别的页面集合中的下一个待识别页面的所有路径,并根据每一所述路径进入所述目标页面执行遍历。
可选地,如图10中的虚线框所示,所述装置还包括:
操作模拟模块1005,被配置为在所述页面测试过程中,针对所述页面的可点击节点,根据该可点击节点的坐标信息模拟对所述可点击节点进行的点击操作,其中,所述节点关系树存储有每一节点的坐标信息。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开一示例性实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法实施例提供的节点关系树的建立方法的步骤。
本公开一示例性实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法实施例提供的页面标记方法的步骤。
本公开一示例性实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法实施例提供的页面识别方法的步骤。
本公开一示例性实施例还提供一种节点关系树建立装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
本公开一示例性实施例还提供一种页面标记装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据图1所示的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成获取到的每一所述节点路径的唯一标识;
将每一所述唯一标识联合作为所述目标页面的标识信息。
本公开一示例性实施例还提供一种页面识别装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树;并
从所述节点关系树中获取目标类节点属性的值为预定值的节点集合,其中,所述节点关系树是根据图1所示的方法建立的。
图11是根据一示例性实施例示出的一种电子设备110的框图。该电子设备110可以是应用程序页面测试设备,参照图11,包括:处理器1101,存储器1102,多媒体组件1103,输入/输出(I/O)接口1104,以及通信组件1105。
其中,处理器1101用于执行该电子设备110的整体操作,已完成上述方法实施例提供的节点关系树的建立方法,或者页面标记方法,或者页面识别方法的全部或部分步骤。存储器1102用于存储各种类型的数据以支持在该电子设备110的操作,这些数据例如可以包括用于在该电子设备110上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器1102可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件1103可以包括屏幕。其中屏幕例如可以是触摸屏,可以响应用户的操作并转化为操作电信号。所接收的操作电信号可以被进一步存储在存储器1102或通过通信组件1105发送。I/O接口1104为处理器1101和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件1105用于该电子设备110与其他设备之间进行有线或无线通信。无线通信例如可以是Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件1105可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备110可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法实施例提供的节点关系树的建立方法,或者页面标记方法,或者页面识别方法的步骤。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

Claims (10)

1.一种节点关系树建立方法,其特征在于,所述方法包括:
通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
2.根据权利要求1所述的方法,其特征在于,所述根据所述XML文件,建立所述页面的节点关系树,包括:
遍历所述控件树的每一节点,依次创建节点关系树的节点;
根据所述控件树中的节点之间的父子关系给所述节点关系树中的每个节点添加父节点的身份标识ID属性信息和所有子节点的ID属性信息;
将所述控件树每一节点的部分或者全部属性信息赋值给所述节点关系树中对应的节点。
3.一种页面标记方法,其特征在于,所述方法包括:
获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据权利要求1所述的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成获取到的每一所述节点路径的唯一标识;
将每一所述唯一标识联合作为所述目标页面的标识信息。
4.根据权利要求3所述的方法,其特征在于,所述获取目标页面的节点关系树中从根节点到叶子节点的节点路径包括:
获取所述目标页面的节点关系树中从根节点到每一满足预设条件的叶子节点的路径。
5.一种页面识别的方法,其特征在于,所述方法包括:
在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树;并
从所述节点关系树中获取目标类节点属性的值为预定值的节点集合,其中,所述节点关系树是根据权利要求1所述的方法建立的。
6.根据权利要求5所述的方法,其特征在于,所述每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树包括:
按照所述测试路径,每进入到所述应用程序的一页面,获取该页面的标识信息,所述测试路径包括待测试的每一页面的标识信息,所述应用程序每一页面的标识信息是根据权利要求3所述的页面标记方法得到的;
若所述页面的标识信息与所述测试路径中当前待测试的页面的标识信息一致,则查找该页面对应的节点关系树。
7.一种节点关系树建立装置,其特征在于,包括:
控件捕获模块,被配置为通过用户界面自动化测试UiAutomator工具捕获页面的控件,得到控件树信息,所述控件树信息包括所述页面的每一节点的属性信息;
调用模块,被配置为调用所述UiAutomator工具的窗口层次化结构转存dumpWindowHierarchy函数将所述控件树信息保存到可扩展标记语言XML文件中;
建立模块,被配置为根据所述XML文件,建立所述页面的节点关系树,其中,所述节点关系树与所述控件树的节点之间的父子关系相同,并且所述节点关系树中的节点包括所述控件树上的同一位置的节点的部分或者全部属性信息;
存储模块,被配置为存储所述节点关系树,使得所述节点关系树在页面测试过程中始终保持可实时获取的状态。
8.一种页面标记装置,其特征在于,所述装置包括:
获取模块,被配置为获取目标页面的节点关系树中从根节点到叶子节点的节点路径,其中,所述节点关系树是根据权利要求1所述的方法建立的节点关系树,所述叶子节点是所述节点关系树中不存在子节点的节点,所述节点路径所经过的节点中不包括重复的节点;
生成模块,被配置为生成获取到的每一所述节点路径的唯一标识;
页面标记模块,被配置为将每一所述唯一标识联合作为所述目标页面的标识信息。
9.一种页面识别的装置,其特征在于,所述装置包括:
查找模块,被配置为在应用程序页面测试过程中,每遍历所述应用程序的一个页面,则查找该页面对应的节点关系树,其中,所述节点关系树是根据权利要求1所述的方法建立的;
识别模块,被配置为从所述节点关系树中获取目标类节点属性的值为预定值的节点集合。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至6中任一项所述方法的步骤。
CN201810806228.8A 2018-07-20 2018-07-20 节点关系树建立、页面标记和识别方法、装置和存储介质 Active CN109086204B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810806228.8A CN109086204B (zh) 2018-07-20 2018-07-20 节点关系树建立、页面标记和识别方法、装置和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810806228.8A CN109086204B (zh) 2018-07-20 2018-07-20 节点关系树建立、页面标记和识别方法、装置和存储介质

Publications (2)

Publication Number Publication Date
CN109086204A true CN109086204A (zh) 2018-12-25
CN109086204B CN109086204B (zh) 2022-03-11

Family

ID=64838443

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810806228.8A Active CN109086204B (zh) 2018-07-20 2018-07-20 节点关系树建立、页面标记和识别方法、装置和存储介质

Country Status (1)

Country Link
CN (1) CN109086204B (zh)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857668A (zh) * 2019-02-03 2019-06-07 苏州市龙测智能科技有限公司 Ui自动化功能测试方法、测试装置、测试设备及存储介质
CN110046194A (zh) * 2019-03-19 2019-07-23 阿里巴巴集团控股有限公司 一种扩展节点关系图的方法、装置和电子设备
CN110287381A (zh) * 2019-06-26 2019-09-27 努比亚技术有限公司 页面控件节点的查找方法、终端及计算机可读存储介质
CN110309073A (zh) * 2019-06-28 2019-10-08 上海交通大学 移动应用程序用户界面错误自动化检测方法、系统及终端
CN110543427A (zh) * 2019-09-06 2019-12-06 五八有限公司 测试用例存储方法、装置、电子设备及存储介质
CN111342933A (zh) * 2020-02-25 2020-06-26 卓望数码技术(深圳)有限公司 数据传输方法、设备及介质
CN111611032A (zh) * 2019-02-25 2020-09-01 阿里巴巴集团控股有限公司 一种用户界面绘制层级、过度绘制的检测方法及装置
CN112019839A (zh) * 2020-09-18 2020-12-01 四川长虹电器股份有限公司 一种安卓智能电视应用自动化测试方法
CN112328492A (zh) * 2020-11-19 2021-02-05 腾讯科技(深圳)有限公司 一种主播间的互动控制方法、装置和电子设备
CN112328841A (zh) * 2020-11-30 2021-02-05 中国民航信息网络股份有限公司 一种文档处理方法、装置、电子设备及存储介质
CN112612698A (zh) * 2020-12-17 2021-04-06 平安普惠企业管理有限公司 应用程序崩溃测试方法及相关产品
CN112860535A (zh) * 2019-11-12 2021-05-28 百度在线网络技术(北京)有限公司 一种用户页面的测试方法、装置、电子设备及存储介质
CN113361235A (zh) * 2021-06-30 2021-09-07 北京百度网讯科技有限公司 Html文件的生成方法、装置、电子设备及可读存储介质
CN113971058A (zh) * 2020-07-22 2022-01-25 北京奇虎科技有限公司 控件定位方法、装置、设备及存储介质
CN114463730A (zh) * 2021-07-15 2022-05-10 荣耀终端有限公司 一种页面识别方法及终端设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101980154A (zh) * 2010-11-02 2011-02-23 深圳市融创天下科技发展有限公司 一种界面控件树的创建和绘制的方法、系统及移动终端
US20130007711A1 (en) * 2011-06-29 2013-01-03 Fryc Lukas Unified model for visual component testing
CN103279420A (zh) * 2013-06-08 2013-09-04 网宿科技股份有限公司 优化的移动终端应用程序自动化测试方法和系统
CN106649100A (zh) * 2016-11-16 2017-05-10 福建天晴数码有限公司 一种自动化测试方法及系统
CN107402882A (zh) * 2017-07-21 2017-11-28 杭州迪普科技股份有限公司 Web页面测试方法和装置
CN108256323A (zh) * 2016-12-29 2018-07-06 武汉安天信息技术有限责任公司 一种针对钓鱼应用的检测方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101980154A (zh) * 2010-11-02 2011-02-23 深圳市融创天下科技发展有限公司 一种界面控件树的创建和绘制的方法、系统及移动终端
US20130007711A1 (en) * 2011-06-29 2013-01-03 Fryc Lukas Unified model for visual component testing
CN103279420A (zh) * 2013-06-08 2013-09-04 网宿科技股份有限公司 优化的移动终端应用程序自动化测试方法和系统
CN106649100A (zh) * 2016-11-16 2017-05-10 福建天晴数码有限公司 一种自动化测试方法及系统
CN108256323A (zh) * 2016-12-29 2018-07-06 武汉安天信息技术有限责任公司 一种针对钓鱼应用的检测方法及装置
CN107402882A (zh) * 2017-07-21 2017-11-28 杭州迪普科技股份有限公司 Web页面测试方法和装置

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109857668A (zh) * 2019-02-03 2019-06-07 苏州市龙测智能科技有限公司 Ui自动化功能测试方法、测试装置、测试设备及存储介质
CN111611032B (zh) * 2019-02-25 2023-05-26 阿里巴巴集团控股有限公司 一种用户界面绘制层级、过度绘制的检测方法及装置
CN111611032A (zh) * 2019-02-25 2020-09-01 阿里巴巴集团控股有限公司 一种用户界面绘制层级、过度绘制的检测方法及装置
CN110046194A (zh) * 2019-03-19 2019-07-23 阿里巴巴集团控股有限公司 一种扩展节点关系图的方法、装置和电子设备
CN110287381A (zh) * 2019-06-26 2019-09-27 努比亚技术有限公司 页面控件节点的查找方法、终端及计算机可读存储介质
CN110287381B (zh) * 2019-06-26 2024-02-09 努比亚技术有限公司 页面控件节点的查找方法、终端及计算机可读存储介质
CN110309073A (zh) * 2019-06-28 2019-10-08 上海交通大学 移动应用程序用户界面错误自动化检测方法、系统及终端
CN110309073B (zh) * 2019-06-28 2021-07-27 上海交通大学 移动应用程序用户界面错误自动化检测方法、系统及终端
CN110543427A (zh) * 2019-09-06 2019-12-06 五八有限公司 测试用例存储方法、装置、电子设备及存储介质
CN112860535A (zh) * 2019-11-12 2021-05-28 百度在线网络技术(北京)有限公司 一种用户页面的测试方法、装置、电子设备及存储介质
CN112860535B (zh) * 2019-11-12 2023-09-15 百度在线网络技术(北京)有限公司 一种用户页面的测试方法、装置、电子设备及存储介质
CN111342933A (zh) * 2020-02-25 2020-06-26 卓望数码技术(深圳)有限公司 数据传输方法、设备及介质
CN111342933B (zh) * 2020-02-25 2022-06-07 卓望数码技术(深圳)有限公司 数据传输方法、设备及介质
CN113971058A (zh) * 2020-07-22 2022-01-25 北京奇虎科技有限公司 控件定位方法、装置、设备及存储介质
CN112019839A (zh) * 2020-09-18 2020-12-01 四川长虹电器股份有限公司 一种安卓智能电视应用自动化测试方法
CN112328492A (zh) * 2020-11-19 2021-02-05 腾讯科技(深圳)有限公司 一种主播间的互动控制方法、装置和电子设备
CN112328841A (zh) * 2020-11-30 2021-02-05 中国民航信息网络股份有限公司 一种文档处理方法、装置、电子设备及存储介质
CN112612698A (zh) * 2020-12-17 2021-04-06 平安普惠企业管理有限公司 应用程序崩溃测试方法及相关产品
CN113361235A (zh) * 2021-06-30 2021-09-07 北京百度网讯科技有限公司 Html文件的生成方法、装置、电子设备及可读存储介质
CN113361235B (zh) * 2021-06-30 2024-03-22 北京百度网讯科技有限公司 Html文件的生成方法、装置、电子设备及可读存储介质
CN114463730A (zh) * 2021-07-15 2022-05-10 荣耀终端有限公司 一种页面识别方法及终端设备

Also Published As

Publication number Publication date
CN109086204B (zh) 2022-03-11

Similar Documents

Publication Publication Date Title
CN109086204A (zh) 节点关系树建立、页面标记和识别方法、装置和存储介质
US8473914B2 (en) Semi-automated update of application test scripts
CN103597469B (zh) 集成开发环境中的实况浏览器工具
CN110427331B (zh) 基于接口测试工具自动生成性能测试脚本的方法
CN108399130A (zh) 自动生成测试案例的方法、装置、设备及可读存储介质
CN103761189B (zh) 一种测试用例管理方法及系统
CN102609432B (zh) 文件管理装置和文件管理方法
US10474657B2 (en) Augmenting relational databases via database structure graph
JP2013019910A5 (zh)
US11385866B2 (en) System and method for automatic software application creation
CN110162457A (zh) 用户界面的测试方法、装置、设备及存储介质
JP6387182B2 (ja) 情報処理方法、装置及びコンピュータ記憶媒体
CN107729227A (zh) 应用程序测试范围确定方法、系统、服务器和存储介质
CN110175609A (zh) 界面元素检测方法、装置及设备
CN108829389A (zh) 基于Appium的安卓应用自动化触发执行方法
CN107122295A (zh) 测试用例脚本的生成方法和装置
CN111966580A (zh) 基于人工智能的自动化测试方法、装置、设备和存储介质
CN105117205A (zh) 一种网页编辑方法和装置
CN106802797A (zh) 一种应用程序编程接口的生成方法及装置
CN113553268A (zh) 一种ai智能软件测试方法
CN106484827A (zh) 检索方法以及装置、终端
US20170308379A1 (en) Evaluating documentation coverage
CN109240679A (zh) 脚本文件的图形化方法及装置
Wilde et al. Merge‐Tree: Visualizing the integration of commits into Linux
CN110427287A (zh) 主板功能测试通用系统及其方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant