本发明实施例涉及终端技术领域,特别涉及一种应用界面的遍历方法、装置及存储介质。
背景技术:
随着终端的普及,为终端开发的应用的种类也愈发繁多。由于用户使用应用时将与应用界面直接交互,因此应用界面的性能对用户来说至关重要。目前,为了能够及时对应用界面进行优化和改进,保证应用界面的稳定性和安全性等性能,通常需要对应用界面进行测试,而测试过程中需要遍历应用界面。
相关技术中提供了一种应用界面的遍历方法,具体为:打开需要遍历的应用的主界面,基于uiautomator(userinterfaceautomator,用户界面自动化)测试框架对该主界面显示的所有控件进行遍历,也即是,获取该主界面中显示的所有控件元素,并对所有可点击的按钮、文字等控件进行点击和跳转后返回的操作,然后确定通过该主界面中的控件能够跳转的其他应用界面,对其他应用界面也采用主界面的遍历方法进行遍历。最后,当遍历的应用界面的数量达到设置的遍历数量或者应用的所有应用界面均遍历完毕时,结束遍历。
但是上述方法中只能对应用界面中完整显示的控件进行遍历,实际应用中,应用界面中还可能存在已加载但未显示或仅部分显示的控件,对于这种控件上述方法将无法遍历到,因此无法实现对应用界面的完全遍历。比如当前应用界面已加载的某个列表控件中存在10条数据,但当前应用界面只显示了5条数据时,通过上述方法则只能遍历到已显示的5条数据,而无法遍历到该列表控件中的全部数据。
技术实现要素:
为了解决相关技术中存在的无法实现对应用界面的完全遍历的问题,本发明实施例提供了一种应用界面的遍历方法、装置及存储介质,所述技术方案如下:
第一方面,提供了一种应用界面的遍历方法,所述方法包括:
显示目标应用的应用界面,所述目标应用为待遍历的应用;
通过可访问性服务,获取第一无障碍节点信息树的根节点信息,所述可访问性服务用于获取当前显示的应用界面的信息,所述第一无障碍节点信息树为所述应用界面对应的无障碍节点信息树,且所述第一无障碍节点信息树包括所述应用界面已加载的所有控件对应的节点;
基于所述第一无障碍节点信息树的根节点信息,依次遍历所述第一无障碍节点信息树的各个节点,以对所述应用界面进行遍历。
可选地,所述显示目标应用的应用界面,包括:
当所述应用界面为所述目标应用的主界面时,通过所述目标应用的预设入口活动类启动所述目标应用的主活动类,通过所述主活动类显示所述应用界面;或者,
获取活动类列表中存储的所述应用界面对应的活动类信息,通过获取的活动类信息显示所述应用界面,所述第一活动类列表中存储的活动类信息是在对所述目标应用的其他应用界面进行遍历的过程中,启动的与所述其他应用界面所属的活动类不同的活动类的信息;或者,
在对所述目标应用的其他应用界面进行遍历的过程中,通过点击所述其他应用界面中的控件,从所述其他应用界面跳转至所述应用界面。
可选地,所述基于所述第一无障碍节点信息树的根节点信息,依次遍历所述第一无障碍节点信息树的各个节点,以对所述应用界面进行遍历,包括:
对于所述第一无障碍节点信息树的每个节点,当遍历到所述节点时,基于所述节点的节点信息,判断所述节点对应的控件是否可被点击且是否未被点击;
若所述控件可被点击且未被点击,则点击所述控件;
若点击所述控件之后所述应用界面没有跳转至其他应用界面,或者所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类不同,则基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历;
若点击所述控件之后所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类相同,则通过可访问性服务,获取第二无障碍节点信息树的根节点信息,并基于所述第二无障碍节点信息树的根节点信息,依次遍历所述第二无障碍节点信息树的各个节点,以对所述其他应用界面进行遍历,所述第二无障碍节点信息树为所述其他应用界面对应的无障碍节点信息树;
当对所述其他应用界面遍历完成时,基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历。
可选地,所述基于所述节点的节点信息,判断所述节点对应的控件是否可被点击且是否未被点击之后,还包括:
若所述节点对应的控件不可被点击或者可被点击且已未被点击,则基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历。
可选地,所述基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历,包括:
若所述节点包括子节点,则按照遍历所述节点的方法,遍历所述节点的各个子节点;
若所述节点不包括子节点,且所述节点包括相邻的且未被遍历的节点,则按照遍历所述节点的方法,遍历与所述节点相邻的且未被遍历的节点;
若所述节点不包括子节点,且不包括相邻的且未被遍历的节点,则返回所述节点的父节点;
若所述节点的父节点为所述第一无障碍节点信息树的根节点,则结束遍历;
若所述节点的父节点不是所述第一无障碍节点信息树的根节点,且所述父节点存在相邻的且未被遍历的节点,则按照遍历所述节点的方法遍历与所述父节点相邻的且未被遍历的节点,否则返回所述父节点的父节点,直至返回至所述第一无障碍节点信息树的根节点,结束遍历。
可选地,所述点击所述控件之后,还包括:
若点击所述控件之后所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类不同,则获取所述其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中。
第二方面,提供了一种应用界面的遍历装置,所述装置包括:
显示模块,用于显示目标应用的应用界面,所述目标应用为待遍历的应用;
获取模块,用于通过可访问性服务,获取第一无障碍节点信息树的根节点信息,所述可访问性服务用于获取当前显示的应用界面的信息,所述第一无障碍节点信息树为所述应用界面对应的无障碍节点信息树,且所述第一无障碍节点信息树包括所述应用界面已加载的所有控件对应的节点;
遍历模块,用于基于所述第一无障碍节点信息树的根节点信息,依次遍历所述第一无障碍节点信息树的各个节点,以对所述应用界面进行遍历。
可选地,所述显示模块用于:
当所述应用界面为所述目标应用的主界面时,通过所述目标应用的预设入口活动类启动所述目标应用的主活动类,通过所述主活动类显示所述应用界面;或者,
获取活动类列表中存储的所述应用界面对应的活动类信息,通过获取的活动类信息显示所述应用界面,所述第一活动类列表中存储的活动类信息是在对所述目标应用的其他应用界面进行遍历的过程中,启动的与所述其他应用界面所属的活动类不同的活动类的信息;或者,
在对所述目标应用的其他应用界面进行遍历的过程中,通过点击所述其他应用界面中的控件,从所述其他应用界面跳转至所述应用界面。
可选地,所述遍历模块包括:
判断单元,用于对于所述第一无障碍节点信息树的每个节点,当遍历到所述节点时,基于所述节点的节点信息,判断所述节点对应的控件是否可被点击且是否未被点击;
点击单元,用于若所述控件可被点击且未被点击,则点击所述控件;
继续遍历单元,用于若点击所述控件之后所述应用界面没有跳转至其他应用界面,或者所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类不同,则基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历;
获取单元,用于若点击所述控件之后所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类相同,则通过可访问性服务,获取第二无障碍节点信息树的根节点信息,并基于所述第二无障碍节点信息树的根节点信息,依次遍历所述第二无障碍节点信息树的各个节点,以对所述其他应用界面进行遍历,所述第二无障碍节点信息树为所述其他应用界面对应的无障碍节点信息树;
继续遍历单元,用于当对所述其他应用界面遍历完成时,基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历。
可选地,所述继续遍历单元还用于:
若所述节点对应的控件不可被点击或者可被点击且已未被点击,则基于所述第一无障碍节点信息树继续进行遍历,以完成所述应用界面的遍历。
可选地,所述继续遍历单元用于:
若所述节点包括子节点,则按照遍历所述节点的装置,遍历所述节点的各个子节点;
若所述节点不包括子节点,且所述节点包括相邻的且未被遍历的节点,则按照遍历所述节点的装置,遍历与所述节点相邻的且未被遍历的节点;
若所述节点不包括子节点,且不包括相邻的且未被遍历的节点,则返回所述节点的父节点;
若所述节点的父节点为所述第一无障碍节点信息树的根节点,则结束遍历;
若所述节点的父节点不是所述第一无障碍节点信息树的根节点,且所述父节点存在相邻的且未被遍历的节点,则按照遍历所述节点的装置遍历与所述父节点相邻的且未被遍历的节点,否则返回所述父节点的父节点,直至返回至所述第一无障碍节点信息树的根节点,结束遍历。
可选地,所述点击单元还用于:
若点击所述控件之后所述应用界面跳转至其他应用界面且所述其他应用界面所属的活动类与所述应用界面所属的活动类不同,则获取所述其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中。
第三方面,提供了一种应用界面的遍历装置,所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述第一方面所述的任一种方法的步骤。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现上述第一方面所述的任一种方法的步骤。
本发明实施例提供的技术方案可以包括以下有益效果:
本发明实施例中,在对显示的应用界面进行遍历时,可以先通过可访问性服务获取该应用界面的无障碍信息节点树的根节点信息,然后基于该根节点信息依次遍历该无障碍信息节点树的各个节点,以对该应用界面进行遍历。由于应用界面的无障碍信息节点树包括该应用界面已加载的所有控件对应的节点,也即是,即包括已加载且已完整显示的控件对应的节点,也包括已加载且未显示或者部分显示的控件对应的节点,因此,通过遍历该应用界面的无障碍节点信息树的各个节点,即可遍历到该应用界面已加载的所有控件,从而实现了对应于界面的完整遍历。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的一种应用界面的遍历方法的流程图;
图2是根据另一示例性实施例示出的一种应用界面的遍历方法的流程图;
图3a是根据一示例性实施例示出的一种应用界面的遍历装置的框图;
图3b是根据一示例性实施例示出的一种遍历模块303的结构示意图;
图4是根据一示例性实施例示出的一种应用界面的遍历装置400的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
首先,对本发明实施例的应用场景进行介绍。
本发明实施例应用于应用测试场景中,具体应用于应用界面测试过程中,对应用界面进行遍历的场景中。对应用界面进行遍历是指对该应用界面的所有控件进行遍历,通过遍历应用界面的所有控件,能够对应用界面的响应效率、稳定性和安全性等性能进行测试,测试完成后,即可根据测试结果对该应用界面进行优化和改进。
其次,对本发明实施例的实施环境进行介绍。
本发明实施例应用于终端中,该终端具体可以为计算机、智能手机、平板电脑、笔记本电脑、上网本、个人数字助理等,本发明实施例对此不做限定。
其中,该终端的操作系统可以为android、ios、windowsphone等手机操作系统,也可以为windows、unix、linux、macos等计算机操作系统,本发明实施例对此不做限定。
其中,该终端可以加载操作系统提供的可访问性服务(accessibilityservice),并可以在遍历当前显示的应用界面时,通过该可访问性服务获取该应用界面的无障碍节点信息树的根节点信息。例如,该终端可以加载android操作系统的可访问性服务。
图1是根据一示例性实施例示出的一种应用界面的遍历方法的流程图,该方法应用于终端中。如图1所示,该方法包括以下步骤。
步骤101:显示目标应用的应用界面,该目标应用为待遍历的应用。
步骤102:通过可访问性服务,获取第一无障碍节点信息树的根节点信息,该可访问性服务用于获取当前显示的应用界面的信息,该第一无障碍节点信息树为该应用界面对应的无障碍节点信息树,且该第一无障碍节点信息树包括该应用界面已加载的所有控件对应的节点。
步骤103:基于该第一无障碍节点信息树的根节点信息,依次遍历该第一无障碍节点信息树的各个节点,以对该应用界面进行遍历。
本发明实施例中,在对显示的应用界面进行遍历时,可以先通过可访问性服务获取该应用界面的无障碍信息节点树的根节点信息,然后基于该根节点信息依次遍历该无障碍信息节点树的各个节点,以对该应用界面进行遍历。由于应用界面的无障碍信息节点树包括该应用界面已加载的所有控件对应的节点,也即是,即包括已加载且已完整显示的控件对应的节点,也包括已加载且未显示或者部分显示的控件对应的节点,因此,通过遍历该应用界面的无障碍节点信息树的各个节点,即可遍历到该应用界面已加载的所有控件,从而实现了对应于界面的完整遍历。
可选地,该显示目标应用的应用界面,包括:
当该应用界面为该目标应用的主界面时,通过该目标应用的预设入口活动类启动该目标应用的主活动类,通过该主活动类显示该应用界面;或者,
获取活动类列表中存储的该应用界面对应的活动类信息,通过获取的活动类信息显示该应用界面,该第一活动类列表中存储的活动类信息是在对该目标应用的其他应用界面进行遍历的过程中,启动的与该其他应用界面所属的活动类不同的活动类的信息;或者,
在对该目标应用的其他应用界面进行遍历的过程中,通过点击该其他应用界面中的控件,从该其他应用界面跳转至该应用界面。
可选地,该基于该第一无障碍节点信息树的根节点信息,依次遍历该第一无障碍节点信息树的各个节点,以对该应用界面进行遍历,包括:
对于该第一无障碍节点信息树的每个节点,当遍历到该节点时,基于该节点的节点信息,判断该节点对应的控件是否可被点击且是否未被点击;
若该控件可被点击且未被点击,则点击该控件;
若点击该控件之后该应用界面没有跳转至其他应用界面,或者该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历;
若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类相同,则通过可访问性服务,获取第二无障碍节点信息树的根节点信息,并基于该第二无障碍节点信息树的根节点信息,依次遍历该第二无障碍节点信息树的各个节点,以对该其他应用界面进行遍历,该第二无障碍节点信息树为该其他应用界面对应的无障碍节点信息树;
当对该其他应用界面遍历完成时,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
可选地,该基于该节点的节点信息,判断该节点对应的控件是否可被点击且是否未被点击之后,还包括:
若该节点对应的控件不可被点击或者可被点击且已未被点击,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
可选地,该基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历,包括:
若该节点包括子节点,则按照遍历该节点的方法,遍历该节点的各个子节点;
若该节点不包括子节点,且该节点包括相邻的且未被遍历的节点,则按照遍历该节点的方法,遍历与该节点相邻的且未被遍历的节点;
若该节点不包括子节点,且不包括相邻的且未被遍历的节点,则返回该节点的父节点;
若该节点的父节点为该第一无障碍节点信息树的根节点,则结束遍历;
若该节点的父节点不是该第一无障碍节点信息树的根节点,且该父节点存在相邻的且未被遍历的节点,则按照遍历该节点的方法遍历与该父节点相邻的且未被遍历的节点,否则返回该父节点的父节点,直至返回至该第一无障碍节点信息树的根节点,结束遍历。
可选地,该点击该控件之后,还包括:
若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则获取该其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中。
上述所有可选技术方案,均可按照任意结合形成本公开的可选实施例,本公开实施例对此不再一一赘述。
图2是根据另一示例性实施例示出的一种应用界面的遍历方法的流程图,该方法应用于终端中。如图2所示,该方法包括以下步骤。
步骤201:显示目标应用的应用界面,该目标应用为待遍历的应用。
本发明实施例中,对于显示的该目标应用的任一应用界面,均可以采用步骤201-209的方法进行遍历。具体地,可以通过以下几种方式显示目标应用的应用界面:
第一种实现方式:当该应用界面为该目标应用的主界面时,通过该目标应用的预设入口活动类启动该目标应用的主活动类,通过该主活动类显示该应用界面。
其中,可以预先设置该目标应用的入口活动(activity)类和主活动类,入口活动类用于启动该目标应用,主活动类对应于该目标应用的至少一个应用界面,且该至少一个应用界面中的一个应用界面为该目标应用的主界面。
当需要测试该目标应用时,即可调用该目标应用的入口活动类,通过该入口活动类启动该目标应用,启动该目标应用之后即可显示该目标应用的主活动类的应用界面。而且,显示的一般是该目标应用的主界面,当然,在另一实施例中,还可以显示该主活动类对应的其他应用界面,本发明实施例对此不做限定。
在另一实施例中,还可以确定该目标应用的图标在该显示屏幕的位置,根据该目标应用的图标的位置触发该目标应用,从而启动该目标应用。但是由于不同终端的显示屏幕的分辨率不同,因此,确定目标应用的图标的位置以及根据位置触发目标应用也就需要根据不同分辨率的终端编写不同的运行代码,从而导致一种测试用例无法兼容不同终端。而通过设置目标应用的入口活动类,并通过入口活动类启动应用程序的主活动类型,则可以兼容不同分辨率的终端,适用性较高。
第二种实现方式:获取活动类列表中存储的该应用界面对应的活动类信息,通过获取的活动类信息显示该应用界面,该第一活动类列表中存储的活动类信息是在对该目标应用的其他应用界面进行遍历的过程中,启动的与该其他应用界面所属的活动类不同的活动类的信息。
也即是,本发明实施例中,在对应用界面进行遍历的过程中,还可以对启动的与当前遍历的应用界面所属的活动类不同的新的活动类实施监听,若监听到启动了新的活动类,即可记录该新的活动类的信息并返回该应用界面,即将该新的活动类的信息存储在活动类列表中。后续待对当前的应用界面遍历完成之后,即可再从该活动类列表中获取存储的活动类信息,并根据该活动类信息启动对应的活动类,以显示该活动类对应的应用界面。
其中,一个活动类可以对应一个或多个应用界面,当启动该活动类时,可以显示该活动类对应的任一应用界面,且显示的应用界面可以预先设置。比如,当启动主活动类时,可以显示预先设置的主界面。
其中,该活动类列表中存储的活动类信息可以为对应活动类的名称以及对应活动类启动的参数等,当然也可以包括对应活动类的其他信息。
第三种实现方式:在对该目标应用的其他应用界面进行遍历的过程中,通过点击该其他应用界面中的控件,从该其他应用界面跳转至该应用界面。
也即是,当前显示的应用界面也可以为在对其他应用界面进行遍历的过程中,从其他应用界面跳转的应用界面,在从其他应用界面跳转至该应用界面之后,也可以按照如下步骤对该应用界面进行遍历。
步骤202:通过可访问性服务,获取第一无障碍节点信息树的根节点信息,该第一无障碍节点信息树为该应用界面对应的无障碍节点信息树,且该第一无障碍节点信息树包括该应用界面已加载的所有控件对应的节点。
其中,该可访问性服务是终端的操作系统提供的一种辅助功能,用于获取当前显示的应用界面的信息,比如可以获取当前显示的应用界面中加载的控件的名称、控件的id、该应用界面对应的活动类的名称、当前应用界面中的节点信息等。
其中,该第一无障碍信息节点树包括该应用界面已加载的所有控件对应的节点,也即是,既包括该应用界面已加载且已完整显示的控件对应的节点,也包括该应用界面已加载但未显示的控件对应的节点,以及已加载但仅部分显示的控件对应的节点。
其中,该应用界面加载的控件可以为按钮、文字、图片、列表等,本发明实施例对此不做限定。无障碍信息节点树的根节点是指该无障碍信息节点树中所有节点的父节点,根节点信息可以包括该根节点的名称、id以及点击属性等。
实际应用中,可以通过继承操作系统的可访问性服务来获取当前显示的应用界面的无障碍节点信息树的根节点信息,也即是,可以预先加载终端的可访问性服务,并在后续测试应用界面时,通过调用该可访问性服务来获取当前显示的应用界面的无障碍信息节点树的根节点信息。
本发明实施例中,在获取该第一无障碍信息节点树的根节点信息之后,还可以基于该第一无障碍节点信息树的根节点信息,依次遍历该第一无障碍节点信息树的各个节点,以对该应用界面进行遍历。由于该第一无障碍节点信息树的各个节点对应于该应用界面已加载的各个控件,因此,依次遍历该第一无障碍信息节点树的各个节点,即可遍历到已加载的各个控件,从而可以实现对应于界面的完全遍历。
具体地,基于该第一无障碍节点信息树的根节点信息,依次遍历该第一无障碍节点信息树的各个节点,可以通过以下步骤203-209实现。
步骤203:对于该第一无障碍节点信息树的每个节点,当遍历到该节点时,基于该节点的节点信息,判断该节点对应的控件是否可被点击且是否未被点击。
实际应用中,可以从该第一无障碍节点信息树的根节点开始,对该第一无障碍节点信息树的各个节点依次进行遍历。而且,在遍历各个节点的过程中,对于该第一无障碍节点信息树的每个节点来说,均可以采用步骤203-209的方式进行遍历。
例如,可以先获取根节点的子节点,然后对该根节点的子节点采用步骤203-209的方式进行遍历。实际应用中,可以通过getchild方法获取该根节点的子节点,而且,对于该第一无障碍节点信息树的每个节点,均可以通过getchild方法获取相应节点的子节点。
其中,当遍历到任一节点时,可以先获取该节点的节点信息,该节点信息包括对应控件的点击属性,点击属性包括是否可点击属性,且当该是否可点击属性为可点击属性时,该点击属性还包括是否已被点击属性。因此,可以根据该节点信息的点击属性,判断该节点对应的控件是否可被点击以及是否未被点击。
进一步地,该节点信息还可以包括对应控件的控件名称、控件内容等信息。
步骤204:若该控件可被点击且未被点击,则点击该控件。
若确定该控件可被点击且未被点击,即可对该控件实施点击操作,以判断通过该控件是否可以进行界面跳转。进一步地,在点击该控件之后,还可以将该节点的节点信息中的点击属性更新为已点击。
步骤205:若点击该控件之后该应用界面没有跳转至其他应用界面,或者该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
具体地,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历可以包括以下几个步骤:
1)若该节点包括子节点,则按照遍历该节点的方法,遍历该节点的各个子节点。
其中,可以通过getchild方法尝试获取该节点的子节点,若能够获取到该节点的子节点,即可确定该节点包括子节点,若获取不到该节点的子节点,即可确定该节点不包括子节点。而且,当获取到该节点的子节点时,即可按照遍历该节点的方法,遍历该节点的各个子节点。
2)若该节点不包括子节点,且该节点包括相邻的且未被遍历的节点,则按照遍历该节点的方法,遍历与该节点相邻的且未被遍历的节点。
也即是,当该节点不包括子节点时,可以先判断该节点是否包括与该节点相邻的且未被遍历的节点,若包括,即可遍历与该节点相邻的且未被遍历的节点。
3)若该节点不包括子节点,且不包括相邻的且未被遍历的节点,则返回该节点的父节点。
4)若该节点的父节点为该第一无障碍节点信息树的根节点,则结束遍历。
返回至该节点的父节点之后,可以先判断该节点的父节点是否为该第一无障碍节点信息树的根节点,若是该根节点,则说明已对该应用界面中的所有节点进行了遍历,即已经完成了对该应用界面的遍历,则此时即可结束对该应用界面的遍历。
5)若该节点的父节点不是该第一无障碍节点信息树的根节点,且该父节点存在相邻的且未被遍历的节点,则按照遍历该节点的方法遍历与该父节点相邻的且未被遍历的节点,否则返回该父节点的父节点,直至返回至该第一无障碍节点信息树的根节点,结束遍历。
若该节点的父节点不是该第一无障碍节点信息树的根节点,则可以判定该父节点是否存在相邻的且未被遍历的节点。若存在,则即可照遍历该节点的方法遍历与该父节点相邻的且未被遍历的节点;若不存在,则即可继续返回至该父节点的父节点,并判断该父节点的父节点是否为该第一无障碍节点信息树的根节点,若是,则结束对该应用界面的遍历,若不是,则继续判断该父节点的父节点是否存在相邻的且未被遍历的节点,若不存在,则继续向上一层节点返回,直至返回至该第一无障碍节点信息树的父节点为止,结束对该应用界面的遍历。
进一步地,若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则还可以获取该其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中。
其中,该其他应用界面所属的活动类的活动类信息可以包括该其他应用界面所属的活动类的名称以及启动该其他应用界面所属的活动类的参数等,该启动该其他应用界面所属的活动类的参数可以包括该节点的节点信息等。
也即是,当跳转至的其他应用界面所属的活动类与该应用界面所属的活动类不同,即启动了新的活动类时,还可以将该新的活动类的活动类信息存储在活动类列表中,以便在对该应用界面遍历完成或者对该应用界面所属的活动类对应的应用界面全部遍历完成时,从该活动类列表中依次获取活动类信息,并基于获取的活动类信息依次对对应的活动类的应用界面进行遍历,且在遍历的过程中,还可以继续监听是否启动了新的活动类,若启动了新的活动类时,则将启动的新的活动类的活动类信息存储在活动类列表中。
获取该其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中之后,还可以返回该应用界面,并对基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
步骤206:若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类相同,则通过可访问性服务,获取第二无障碍节点信息树的根节点信息,并基于该第二无障碍节点信息树的根节点信息,依次遍历该第二无障碍节点信息树的各个节点,以对该其他应用界面进行遍历,该第二无障碍节点信息树为该其他应用界面对应的无障碍节点信息树。
也即是,在对该节点对应的控件进行点击之后,可以判断该应用界面是否跳转至了其他应用界面,若调转至了其他应用界面,还可以继续判断所跳转的其他应用界面所属的活动类与该应用界面所属的活动类是否相同,若相同,则即可按照遍历该应用界面的方法,对该其他应用界面进行遍历。
具体地,对该应用界面进行遍历时,可以通过可访问性服务,获取该其他应用界面的无障碍节点信息树的根节点信息,即第二无障碍节点信息树的根节点信息,然后基于该第二无障碍节点信息树的根节点信息,依次遍历该第二无障碍节点信息树的各个节点,以对该其他应用界面进行遍历。
步骤207:当对该其他应用界面遍历完成时,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
当对该其他应用界面遍历完成时,即可从该其他应用界面返回至该应用界面,并具体返回至该应用界面的该节点,并基于该节点和该第一无障碍节点信息树继续对该应用界面进行遍历。实际应用中,可以通过返回键从该其他应用界面返回至该应用界面。
其中,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历的具体过程可以参考上述步骤205的相关描述,此处不再赘述。
步骤208:若该节点对应的控件不可被点击或者可被点击且已未被点击,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
也即是,获取该节点的节点信息之后,若基于该节点信息确定该节点对应的控件不可被点击或者可被点击且已未被点击,则即可基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
其中,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历的具体过程可以参考上述步骤205的相关描述,此处不再赘述。
进一步地,本发明实施例还可以以活动类为单位进行遍历。当对某一个活动类进行遍历时,首先可以启动该活动类,并对该主活动类的所有应用界面进行遍历。而且,对于该活动类的每个应用界面均可以采用上述步骤201-209的方法进行遍历。而且,启动该活动类之后,首先可以显示该活动类的指定界面,该指定界面为预先设置的该活动类启动时最初显示的应用界面,且该指定应用界面可以为该活动类的所有应用界面中的任一应用界面。
相应地,以活动类为单位进行遍历时,对于该活动类的每个应用界面,上述步骤205中的步骤4)可以包括:若该节点的父节点为该第一无障碍节点信息树的根节点,则结束对该应用界面的遍历,并判断该应用界面是否为该活动类的指定应用界面;若该应用界面为该指定应用界面,则结束对该活动类的遍历;若该应用界面不是该活动类的指定应用界面,则返回该应用界面的上一层界面,且返回至跳转至该应用界面时所点击的节点,并基于返回的节点和该上一层界面的无障碍节点信息树的根节点对该上一层界面继续进行遍历。
而且,在对某一活动类进行遍历的过程中,还可以监听启动的新的活动类,并将启动的新的活动类的活动类信息存储在活动类列表中,以便在对当前的活动类遍历完成时,从该活动类列表中依次获取活动类信息,并基于获取的活动类信息依次对对应的活动类的应用界面进行遍历。而且,在遍历的过程中,还可以继续监听是否启动了新的活动类,若启动了新的活动类时,则将启动的新的活动类的活动类信息存储在活动类列表中。
本发明实施例中,在对显示的应用界面进行遍历时,可以先通过可访问性服务获取该应用界面的无障碍信息节点树的根节点信息,然后基于该根节点信息依次遍历该无障碍信息节点树的各个节点,以对该应用界面进行遍历。由于应用界面的无障碍信息节点树包括该应用界面已加载的所有控件对应的节点,也即是,即包括已加载且已完整显示的控件对应的节点,也包括已加载且未显示或者部分显示的控件对应的节点,因此,通过遍历该应用界面的无障碍节点信息树的各个节点,即可遍历到该应用界面已加载的所有控件,从而实现了对应于界面的完整遍历。
图3a是根据一示例性实施例示出的一种应用界面的遍历装置的框图。参照图3a,该装置包括:
显示模块301,用于显示目标应用的应用界面,该目标应用为待遍历的应用。
获取模块302,用于通过可访问性服务,获取第一无障碍节点信息树的根节点信息,该可访问性服务用于获取当前显示的应用界面的信息,该第一无障碍节点信息树为该应用界面对应的无障碍节点信息树,且该第一无障碍节点信息树包括该应用界面已加载的所有控件对应的节点。
遍历模块303,用于基于该第一无障碍节点信息树的根节点信息,依次遍历该第一无障碍节点信息树的各个节点,以对该应用界面进行遍历。
可选地,该显示模块301用于:
当该应用界面为该目标应用的主界面时,通过该目标应用的预设入口活动类启动该目标应用的主活动类,通过该主活动类显示该应用界面;或者,
获取活动类列表中存储的该应用界面对应的活动类信息,通过获取的活动类信息显示该应用界面,该第一活动类列表中存储的活动类信息是在对该目标应用的其他应用界面进行遍历的过程中,启动的与该其他应用界面所属的活动类不同的活动类的信息;或者,
在对该目标应用的其他应用界面进行遍历的过程中,通过点击该其他应用界面中的控件,从该其他应用界面跳转至该应用界面。
可选地,参见图3b,该遍历模块303包括:
判断单元3031,用于对于该第一无障碍节点信息树的每个节点,当遍历到该节点时,基于该节点的节点信息,判断该节点对应的控件是否可被点击且是否未被点击;
点击单元3032,用于若该控件可被点击且未被点击,则点击该控件;
继续遍历单元3033,用于若点击该控件之后该应用界面没有跳转至其他应用界面,或者该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历;
获取单元3034,用于若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类相同,则通过可访问性服务,获取第二无障碍节点信息树的根节点信息,并基于该第二无障碍节点信息树的根节点信息,依次遍历该第二无障碍节点信息树的各个节点,以对该其他应用界面进行遍历,该第二无障碍节点信息树为该其他应用界面对应的无障碍节点信息树;
该继续遍历单元3033,用于当对该其他应用界面遍历完成时,基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
可选地,该继续遍历单元3033还用于:
若该节点对应的控件不可被点击或者可被点击且已未被点击,则基于该第一无障碍节点信息树继续进行遍历,以完成该应用界面的遍历。
可选地,该继续遍历单元3033用于:
若该节点包括子节点,则按照遍历该节点的装置,遍历该节点的各个子节点;
若该节点不包括子节点,且该节点包括相邻的且未被遍历的节点,则按照遍历该节点的装置,遍历与该节点相邻的且未被遍历的节点;
若该节点不包括子节点,且不包括相邻的且未被遍历的节点,则返回该节点的父节点;
若该节点的父节点为该第一无障碍节点信息树的根节点,则结束遍历;
若该节点的父节点不是该第一无障碍节点信息树的根节点,且该父节点存在相邻的且未被遍历的节点,则按照遍历该节点的装置遍历与该父节点相邻的且未被遍历的节点,否则返回该父节点的父节点,直至返回至该第一无障碍节点信息树的根节点,结束遍历。
可选地,该点击单元3032还用于:
若点击该控件之后该应用界面跳转至其他应用界面且该其他应用界面所属的活动类与该应用界面所属的活动类不同,则获取该其他应用界面所属的活动类的活动类信息,并将获取的活动类信息存储在活动类列表中。
本发明实施例中,在对显示的应用界面进行遍历时,可以先通过可访问性服务获取该应用界面的无障碍信息节点树的根节点信息,然后基于该根节点信息依次遍历该无障碍信息节点树的各个节点,以对该应用界面进行遍历。由于应用界面的无障碍信息节点树包括该应用界面已加载的所有控件对应的节点,也即是,即包括已加载且已完整显示的控件对应的节点,也包括已加载且未显示或者部分显示的控件对应的节点,因此,通过遍历该应用界面的无障碍节点信息树的各个节点,即可遍历到该应用界面已加载的所有控件,从而实现了对应于界面的完整遍历。
需要说明的是:上述实施例提供的应用界面的遍历装置在遍历应用界面时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的应用界面的遍历装置与应用界面的遍历方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图4是根据一示例性实施例示出的一种应用界面的遍历装置400的结构示意图。例如,装置400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图4,装置400可以包括以下一个或多个组件:处理组件402,存储器404,电源组件406,多媒体组件408,音频组件410,输入/输出(i/o)的接口412,传感器组件414,以及通信组件416。
处理组件402通常控制装置400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件402可以包括一个或多个处理器420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理组件402可以包括多媒体模块,以方便多媒体组件408和处理组件402之间的交互。
存储器404被配置为存储各种类型的数据以支持在装置400的操作。这些数据的示例包括用于在装置400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
电源组件406为装置400的各种组件提供电源。电源组件406可以包括电源管理系统,一个或多个电源,及其他与为装置400生成、管理和分配电源相关联的组件。
多媒体组件408包括在所述装置400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当装置400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件410被配置为输出和/或输入音频信号。例如,音频组件410包括一个麦克风(mic),当装置400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
i/o接口412为处理组件402和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件414包括一个或多个传感器,用于为装置400提供各个方面的状态评估。例如,传感器组件414可以检测到装置400的打开/关闭状态,组件的相对定位,例如所述组件为装置400的显示器和小键盘,传感器组件414还可以检测装置400或装置400一个组件的位置改变,用户与装置400接触的存在或不存在,装置400方位或加速/减速和装置400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件416被配置为便于装置400和其他设备之间有线或无线方式的通信。装置400可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个示例性实施例中,通信组件416经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件416还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
在示例性实施例中,装置400可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述图1或图2实施例提供的应用界面的遍历方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器404,上述指令可由装置400的处理器420执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行上述图1或图2实施例提供的应用界面的遍历方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。