CN117215904A - Ui树的处理方法、设备及系统 - Google Patents

Ui树的处理方法、设备及系统 Download PDF

Info

Publication number
CN117215904A
CN117215904A CN202210624702.1A CN202210624702A CN117215904A CN 117215904 A CN117215904 A CN 117215904A CN 202210624702 A CN202210624702 A CN 202210624702A CN 117215904 A CN117215904 A CN 117215904A
Authority
CN
China
Prior art keywords
tree
interface
test
attribute information
interface service
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.)
Pending
Application number
CN202210624702.1A
Other languages
English (en)
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 ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology 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 ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202210624702.1A priority Critical patent/CN117215904A/zh
Publication of CN117215904A publication Critical patent/CN117215904A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本公开提供一种UI树的处理方法、设备及系统,涉及自动化测试技术领域。该方法包括:测试设备通过测试设备和接口服务之间的连接,向终端设备发送第一请求;终端设备通过接口服务调用Flutter框架,生成应用程序中的当前显示界面的UI树,UI树中包括控件的属性信息;终端设备对UI树进行目标处理,包括:通过上述连接将UI树发送给测试设备、从UI树中获取目标控件的属性信息,测试设备用于通过UI树生成测试用例,目标控件的属性信息用于执行测试用例。本公开可以通过终端设备内置的服务接口提供获取UI树的能力。由于接口服务内置在UI框架中,从而在应用程序的调试和发布环境下均可以提供UI树,实现测试用例的开发和运行。

Description

UI树的处理方法、设备及系统
技术领域
本公开实施例涉及自动化测试技术领域,尤其涉及一种UI树的处理方法、设备及系统。
背景技术
应用程序的UI(user interface,用户界面)可以基于开源的UI框架实现。UI框架可以分为跨端UI框架和非跨端UI框架。其中,跨端UI框架是指可以在多种类型的操作系统上运行的UI框架,有助于减少开发成本。非跨端UI框架是指可以在一种指定类型的操作系统上运行的UI框架。
现有技术中,对上述应用程序的测试用例的开发以及执行需要依赖上述UI框架。依赖于上述UI框架的测试用例开发过程可以包括:首先,调用上述UI框架获取应用程序的当前显示界面的UI树,其中,UI树是对UI界面结构进行描述的树状结构,其中包括UI界面中各控件的属性信息以及这些控件之间的关系;然后,开发人员从UI树中查看测试用例针对的目标控件的属性信息,以撰写测试用例。依赖于上述UI框架的测试用例执行过程可以包括:首先,调用上述UI框架获取应用程序的当前显示界面的UI树;然后,根据目标控件的目标属性信息从UI树中获取到目标控件的位置;最后,根据该位置对该目标控件执行测试。
然而,当应用程序的UI基于的UI框架为Flutter框架时,上述测试用例的开发过程和执行过程在应用程序的发布环境下均无法实现。
发明内容
本公开实施例提供一种UI树的处理方法、设备及系统,可以在Flutter框架实现的应用程序的发布环境下,实现测试用例的开发过程和执行过程。
第一方面,本公开实施例提供一种UI树的处理方法,应用于终端设备,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述方法包括:
通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求;
响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息;
对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
第二方面,本公开实施例提供一种UI树的处理方法,应用于测试设备,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述方法包括:
通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求;
通过所述连接接收所述终端设备发送的UI树,所述UI树是所述接口服务针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
第三方面,本公开实施例提供一种终端设备,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述终端设备包括:
第一请求接收模块,用于通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求;
UI树生成模块,用于响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息;
目标处理模块,用于对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
第四方面,本公开实施例提供一种测试设备,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述测试设备包括:
第一请求发送模块,用于通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求;
UI树接收模块,用于通过所述连接接收所述终端设备发送的UI树,所述UI树是所述接口服务针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
第五方面,本公开实施例提供一种终端设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述终端设备实现如第一方面所述的方法。
第六方面,本公开实施例提供一种测试设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述测试设备实现如第二方面所述的方法。
第七方面,本公开实施例提供一种UI树处理系统,包括前述第二方面或第四方面的终端设备,以及,前述第三方面或第五方面的测试设备。
第八方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,使计算设备实现如第一方面或第二方面的方法。
第九方面,本公开实施例提供一种计算机程序,所述计算机程序用于实现如第一方面或第二方面的方法。
本公开实施例提供了一种UI树的处理方法、设备及系统,该方法包括:测试设备通过测试设备和接口服务之间的连接,向终端设备发送第一请求;响应于第一请求,终端设备通过接口服务调用Flutter框架,生成应用程序中的当前显示界面的UI树,UI树中包括当前显示界面中至少一个控件的属性信息;终端设备对UI树进行目标处理,目标处理包括以下至少一种:通过上述连接将UI树发送给测试设备、从UI树中获取目标控件的属性信息,测试设备用于通过UI树生成测试用例,目标控件的属性信息用于执行测试用例。本公开实施例可以通过终端设备内置的服务接口,提供获取UI树的能力。由于接口服务内置在UI框架中,从而对于UI为Flutter框架的应用程序,其在加载Flutter时就可以加载接口服务。这样,可以在应用程序的debug和发布环境下均可以运行,以在这两个环境下均可以获取到UI树,实现测试用例的开发和运行。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种UI树的处理方法的场景示意图;
图2是本公开实施例提供的一种UI树的处理方法的步骤流程图;
图3是本公开实施例提供的一种测试设备和终端设备之间交互的过程;
图4是本公开实施例提供的一种基于接口服务的测试过程示意图;
图5是本公开实施例提供的一种元素对象树的结构示意图;
图6是本公开实施例提供的一种渲染对象树的结构示意图;
图7是本公开实施例提供的图6所示的渲染对象树对应的界面结构示意图;
图8是本公开实施例提供的一种终端设备的结构框图;
图9是本公开实施例提供的一种测试设备的结构框图;
图10是本公开实施例提供的一种电子设备的结构框图;
图11是本公开实施例提供的另一种电子设备的结构框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
如背景技术所述,现有技术存在以下问题:当应用程序的UI基于的UI框架为Flutter框架时,上述测试用例的开发过程和执行过程在应用程序的发布环境下均无法实现。申请人对上述问题进行分析之后发现,出现上述问题的原因之一在于,在Flutter框架实现的应用程序的debug环境下,Flutter框架可以提供调试协议来获取UI树,但是该调试协议无法在发布环境下使用。在Flutter框架实现的应用程序的发布环境下,仅可以通过Accesssibility接口获取到小部分界面的UI树,无法支持全部界面的UI树的获取。
基于上述原因,开发人员无法获取到目标控件的属性信息,也就无法根据属性信息撰写测试用例。此外,在测试用例的执行过程中,由于无法获取到UI树,也就无法在UI树中找到目标控件的属性信息,导致无法执行测试用例。
为了解决上述问题,本公开实施例考虑如何使Flutter框架在debug环境和发布环境下均可以提供UI树的获取方法,这样,可以在任一环境下实现对FlutterUI框架实现的应用程序的测试用例的开发和执行。
原生的上述Flutter框架可以在Semantics工具和开发者工具中提供UI树的获取方法。其中,Semantics工具可以支持debug环境和发布环境,但其仅可以获取小部分界面的UI树,且无法对其进行封装。从而,本公开实施例考虑可以通过进程内获取的方式获取UI树,包括动态注入和内置代码的方式。其中,动态注入包括:重打包、进程ptrace两种。
但是,由于Flutter框架使用的dart语言在发布环境下不支持动态特性,也就是无法通过动态注入的方式获取UI树。
综上考虑,本公开实施例可以通过内置代码的方式实现UI树的获取。内置的代码也可以称为插件信息。本公开实施例的插件信息的编程语言是dart语言。
具体地,本公开实施例在Flutter框架中内置接口服务,也可以称为套接字服务器(socket server),该接口服务是一个虚拟服务器。测试设备可以与该接口服务连接,并调用该接口服务获取UI树。
下面以具体地实施例对本公开实施例的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开实施例进行描述。
图1是本公开实施例提供的一种UI树的处理方法的场景示意图。参照图1所示,UI树的获取过程涉及相互通信连接的测试设备和终端设备。
其中,终端设备上运行有应用程序,该应用程序的用户界面UI采用Flutter框架,从而也就是说,终端设备上同时运行有终端设备的操作系统、应用程序、Flutter框架。
上述Flutter框架属于跨端UI框架,其与应用程序之间相互独立,相互解耦合,但可以交互。例如,Flutter框架可以通过事件注入的方式对应用程序的当前显示界面进行操作,以实现对该当前显示界面的测试。又例如,应用程序可以调用Flutter框架获取一些当前显示界面的基础信息等。在本公开实施例中,上述操作系统还可以调用应用程序,以请求对接口服务进行启动。
上述应用程序与操作系统也可以交互。例如,在应用程序的运行过程中,操作系统可以接收测试设备发送的请求,并将请求转发给应用程序进行处理。又例如,应用程序可以调用操作系统的图像拍摄功能以拍摄图像,或调用操作系统的文件访问接口以访问终端设备上的文件等。在本公开实施例中,上述应用程序还可以调用Flutter框架对接口服务进行启动。
上述操作系统和Flutter框架之间也可以交互。在本公开实施例中,Flutter框架可以将接口服务的第二端口信息通过操作系统发送给测试设备。
本公开实施例在上述Flutter框架中添加了内置的接口服务,该接口服务用于提供生成UI树的能力。当然,该接口服务还可以提供将该UI树进行发送的能力、在该UI树中定位目标控件的属性信息的能力、对应用程序的当前显示界面进行操作的能力、对应用程序和操作系统控制的能力等。
本公开实施例的接口服务需要新增以下能力:提供生成UI树的能力、将该UI树进行发送的能力、在UI树中定位目标控件的属性信息的能力。上述接口服务还可以复用原生Flutter框架提供的以下能力:对应用程序的当前显示界面进行操作的能力、对应用程序和操作系统控制的能力。例如,如Android(安卓)的UIAutomator,iOS(苹果系统)的xctest等。如此,可以尽可能的减少接口服务的开发工作量,提高开发效率。此外,还可以减小Flutter框架的代码量,以节约其所占用的计算机资源。
基于上述图1所示的场景示意图,图2是本公开实施例提供的一种UI树的处理方法的步骤流程图。参照图2所示,该UI树的处理方法包括:
S101:测试设备通过测试设备和接口服务之间的连接,向终端设备发送第一请求。
与S101对应地,终端设备通过S101中的该连接,接收测试设备发送的第一请求。
其中,这里的第一请求用于请求生成UI树。在测试用例的生成过程和执行过程中,第一请求中携带的信息可以不同。
在测试用例的生成过程中,可以通过上述第一请求获取UI树,获取的UI树用于生成测试用例。此时,上述第一请求中可以携带界面标识,以请求该界面标识对应的当前显示界面的UI树。其中,该界面标识可以是唯一标识一个界面的任意标识。例如,可以是根据当前显示界面的控件分布状态生成的哈希码,从而不同控件分布的当前显示界面对应不同的哈希码。
在上述测试用例的执行过程中,可以通过上述第一请求获取UI树,获取的UI树用于获取目标控件的属性信息,以对目标控件进行测试。其中,该UI树是应用程序当前显示界面的UI树,从而,第一请求可以不携带界面标识。
但是,在上述测试用例的执行过程中,第一请求中需要携带目标控件的关键属性信息。当该关键属性信息与UI树中的一个控件对应的属性信息匹配时,那么,可以将该控件确定为目标控件。例如,关键属性信息可以为目标控件的控件标识,那么可以从UI树中获取到该控件标识对应的控件,作为目标控件。其中,该控件标识是控件的其中一种属性信息,这样,可以通过控件标识这种属性信息,获取到目标控件的所有属性信息。
可以看出,本公开实施例的第一请求是通过上述连接发送和接收的,从而,该连接需要预先建立。而在建立该连接之前,需要先启动接口服务。
具体地,上述接口服务的启动过程和连接的建立过程可以参照以下步骤S1至S4,其中,S1和S2是接口服务的启动过程,S3至S4是连接的建立过程。
S1,测试设备向终端设备发送第三请求,该第三请求用于启动接口服务。相应地,终端设备接收测试设备发送的该第三请求。
图3是本公开实施例提供的一种测试设备和终端设备之间交互的过程。参照图3所示,测试设备向终端设备发送的第三请求可以由终端设备的操作系统接收。
S2,响应于第三请求,终端设备需要判断接口服务的状态,并根据该状态确定是否启动接口服务,并将接口服务的第二端口信息发送给测试设备。相应地,测试设备接收终端设备发送的接口服务的第二端口信息。
其中,是否启动接口服务可以包括以下两种情况:
第一种情况,若接口服务处于未启动状态,则可以通过终端设备的操作系统,调用应用程序中的第一通道接口和Flutter框架中的第二通道接口,启动接口服务,第一通道接口和第二通道接口对接。这里的第一通道接口和第二通道接口的对接形成了一个通道。
参照图3所示,终端设备的操作系统调用第一通道接口,第一通道接口调用第二通道接口,第二通道接口启动接口服务。可以看出,接口服务的启动过程是多个接口的嵌套调用过程,最终直接启动接口服务的是第二通道接口。
其中,第一通道接口可以在应用程序中内置,并提供该应用程序中提供调试开关。当该调试开关处于开启状态时,可以通过第一通道接口、第二通道接口启动接口服务。当该调试开关处于关闭状态时,不启动接口服务。
当然,还可以通过对应用程序重打包的方式将第一通道接口注入到应用程序中,从而可以通过反射机制实现第一通道接口和第二通道接口之间的调用。
在启动接口服务之后,上述第二通道接口在每次启动接口服务之后,第二通道接口可以针对本次启动生成第二端口信息,以发送给测试设备。从而,不同次启动对应的第二端口信息可以不同,这样可以尽可能的避免第二端口信息泄露导致的接口服务被非法调用,有助于提高接口服务的安全性。
参照图3所示,第二通道接口可以将第二端口信息先发送给操作系统,再由操作系统将第二端口信息发送给测试设备。这样,第二通道接口与测试设备之间形成隔离,有助于提高第二通道接口的安全性。
第二种情况,若接口服务处于已启动状态,则不需要启动接口服务,只需要通过第二通道接口将接口服务的第二端口信息发送给测试设备。如此,可以避免重复启动接口服务,有助于降低接口服务的频繁启动,节约启动接口服务所需要的计算机资源。
本公开实施例的接口服务在默认状态下处于未启动状态,从而可以避免对线上用户使用应用程序造成影响,也就是说本公开实施例提供的接口服务具有无侵入性。
此外,本公开实施例可以支持一个应用程序有多个Flutter的情况,每个Flutter框架中均可以运行有一个接口服务。
S3,测试设备向终端设备发送第二请求,第二请求中包括第一端口信息,第二请求用于通过第一端口信息建立与接口服务之间的连接。相应地,终端设备接收测试设备发送的第二请求。
参照图3所示,在接口服务启动之后,测试设备可以接收到第二端口信息。此时,测试设备可以将该第二端口信息作为第一端口信息添加到第二请求中,并通过第二请求,建立与接口服务之间的连接。
S4,在接口服务处于已启动状态下,确定第一端口信息与接口服务记录的第二端口信息是否一致,并确定是否建立连接。
需要说明的是,接口服务记录的第二端口信息是启动接口服务之后,第二通道接口发送给接口服务的。
其中,是否建立连接可以包括以下两种情况:
第一种情况,若第一端口信息与第二端口信息一致,则连接建立成功。
第二种情况,若第一端口信息与第二端口信息不一致,则连接建立失败。
参照图3所示,接口服务可以针对第二请求回复建立结果消息给测试设备。其中,建立结果消息用于指示连接建立成功或连接建立失败。从而,测试设备可以在接收到建立结果消息之后,如果判断连接建立成功,则可以通过该连接访问接口服务。例如,参照图3所示,测试设备可以通过该连接向接口服务发送第一请求,以获取到UI树。
当然,当第一请求是测试设备在测试用例的生成过程中发送的时,图3中的接口服务可以向测试设备回复的UI树。当第一请求是测试设备在测试用例的执行过程中发送的时,图3中的接口服务可以在UI树中定位到目标控件的属性信息,但并不会将UI树发送给测试设备。
S102:响应于第一请求,终端设备通过接口服务调用Flutter框架,生成应用程序中的当前显示界面的UI树,UI树中包括当前显示界面中至少一个控件的属性信息。
其中,当前显示界面是应用程序中的任一界面。在测试用例的生成过程中,第一请求中可以携带页面标识,从而该当前显示界面是该页面标识对应的界面。在测试用例的执行过程中,该当前显示界面随测试过程的进行而不断更新。
上述UI树一个树状结构,UI树中的每个节点对应一个控件,该节点中可以存储该控件的属性信息。控件的属性信息可以包括但不限于:控件的名称、控件标识、控件在当前显示界面中的位置、控件类型、控件的操作类型等。
由于上述UI树中包括控件的属性信息,从而生成UI树的过程就是获取当前显示界面中各个控件的属性信息的过程。在应用程序的UI领域中,应用程序的当前显示界面对应一个元素对象(element tree)树,元素对象树中包括该当前显示界面中的所有元素对象的所有属性信息,当前显示界面中的控件与部分元素对象对应。从而,可以根据该元素对象树中的各个元素对象的属性信息生成UI树。
本公开实施例可以通过关联元素对象树和渲染对象树,以获取控件的属性信息。一方面,由于渲染对象树中的渲染对象是在当前显示界面中可能显示的对象,从而可以有效减小UI树的尺寸。另一方面,由于元素对象树中的元素对象中包括了控件的所有属性信息,从而,可以保证生成的UI树中包括控件的所有属性信息,包括但不限于:文本内容、是否可视、显示的位置、渲染名称、Widget名称等。
但是,上面的元素对象不仅包括当前显示界面中的控件对应的元素对象,还包括当前显示界面中不可视的对象对应的元素对象。如果将所有元素对象的属性信息均添加到UI树中,那么可能会导致UI树较大。
本公开实施例考虑到上述UI树用于生成测试用例,或执行测试用例,从而UI树中的控件可以是可视的对象,也就是在当前显示界面中可以看到控件。这样,该控件才可能被测试,其余不可视的对象可以不添加到UI树中。从而,可以减小UI树,降低遍历UI树的计算复杂度,以及遍历UI树所需要消耗的时长,有助于提高遍历UI树的效率,进而提高生成测试用例的效率以及执行测试用例的效率。
考虑到上述可视的对象首先是渲染对象,然后再从渲染对象中选取可视的目标渲染对象,作为可视的对象。从而,上述生成UI树的过程可以包括以下步骤:首先,获取应用程序中的当前显示界面的渲染对象树;然后,从渲染对象树中获取至少一个可视的目标渲染对象;最后,根据目标渲染对象的属性信息生成UI树,每个目标渲染对象对应一个控件。
其中,渲染对象树也是一个树状结构,其中存储有当前显示界面中的渲染对象(render object)。每个渲染对象均在元素对象树中对应有一个元素对象,元素对象中的属性信息记为该渲染对象的属性信息。
在生成UI树的过程中需要遍历上述渲染对象树,Flutter框架提供有原生的获取渲染对象树中的需要渲染的渲染对象的方法,从而可以直接调用该方法。
对于同一个当前显示界面,上述渲染对象树中的渲染对象比元素对象树中的元素对象少。也就是说,元素对象树是由当前显示界面的所有元素对象构成,而渲染对象树有当前显示界面的所有元素对象中的渲染对象构成,渲染对象是部分元素对象。
图5是本公开实施例提供的一种元素对象树的结构示意图,图6是本公开实施例提供的一种渲染对象树的结构示意图。图5所示的元素对象树和渲染对象树对应同一个当前显示界面。
参照图5所示,当前显示界面的元素对象包括EO1至EO10,这些元素对象按照父子关系构成图5所示的树状结构。
参照图6所示,当前显示界面的渲染对象包括:RO2、RO5、RO6、RO7、RO8、RO9和RO10,这些渲染对象按照父子关系构成图6所示的树状结构。其中,RO2对应EO1,RO5对应EO5,RO6对应EO6,RO7对应EO7,RO8对应EO8,RO9对应EO9,RO10对应EO10。可以看出,渲染对象比元素对象少,渲染对象对应部分元素对象。
子节点对应的渲染对象位于在父节点对应的渲染对象的区域中。按照上述图6所示的渲染对象的关系,可以得到图7所示的当前显示界面。
参照图7所示,子节点RO5和RO6位于父节点RO2的区域中,子节点RO7和RO8位于父节点RO5的区域中,RO9和RO10位于父节点RO6的区域中。
可以看出,上述图7所示的当前显示界面是由图6所示的渲染对象树中的渲染对象生成的,每个渲染对象对应一个控件。图6所示的渲染对象树对应一个元素对象树,渲染对象树中的每个渲染对象对应一个元素对象。上述元素对象树对应一个widget树(UI树),从而,对应用程序的Flutter UI开发本质上是通过SDK提供的原生widget(控件)组装有状态widget或无状态widget。其中,有状态widget的状态不变更,无状态widget的状态不断变更。最终可以根据这些有状态widget或无状态widget构成一个当前显示界面,该当前显示界面中包括的对象可以包括可视的对象或不可视的对象,而可视的对象可以对应当前显示界面中的一个控件。这些控件可以是可操作的控件,也可以是不可操作的控件。是否可操作以及如何操作可以在属性信息中体现。
需要说明的是,上述Widget可以用于描述元素对象的配置信息。元素对象构成的元素对象树是当前显示界面中的所有对象,对当前显示界面的修改都是对元素对象树的修改,包括但不限于:删除元素对象树中的元素对象、增加元素对象、修改元素对象等。
本公开实施例可以从上述图6所示的渲染对象树中筛选出来可视的目标渲染对象,从而生成UI树。一方面,渲染对象树中的渲染对象小于元素对象树中的元素对象,并且渲染对象才有可能是显示在当前显示界面中的可操作的控件,从而根据渲染对象的属性信息生成UI树有助于减小UI树的尺寸。另一方面,从渲染对象中进一步选取可视的目标渲染对象,并根据目标渲染对象的属性信息生成UI树有助于进一步减小UI树的尺寸。
可选地,上述目标渲染对象包括以下至少一种:显示尺寸大于或等于预设尺寸且显示区域在屏幕内的渲染对象、非代理类型的渲染对象,代理类型的渲染对象用于显示非代理类型的渲染对象。
其中,显示尺寸是渲染对象的一种属性信息,如果显示尺寸大于或等于预设尺寸,则可以确定该渲染对象是可视的目标渲染对象。如果显示尺寸小于预设尺寸,则可以确定该渲染对象是非可视的渲染对象。
上述显示区域是渲染对象的另一种属性信息,如果显示区域在屏幕内,则可以确定该渲染对象是可视的目标渲染对象。如果显示区域不在屏幕内,则可以确定该渲染对象是非可视的渲染对象。
在本公开实施例中,可以结合上述显示尺寸和显示区域确定渲染对象是否可视,有助于提高是否可视的判断准确度,进而提高目标渲染对象的准确度。
除上述通过显示尺寸和显示区域判断是否可视外,还可以通过渲染对象对应的类型确定其是否可视。该类型包括代理类型和非代理类型。其中,代理类型的渲染对象用于显示非代理类型的渲染对象,非代理类型的渲染对象是可视的渲染对象。
可以看出,本公开实施例可以通过多种维度确定可视的目标渲染对象,有助于提高目标渲染对象的准确度。一方面,可以避免将不可视的渲染对象确定为可视的目标渲染对象,保证UI树的尺寸尽量小,以尽可能的提高遍历UI树的效率。另一方面,可以避免将可视的目标渲染对象确定为不可视的渲染对象,保证UI树中包括可视的所有目标渲染对象,避免UI树遗漏掉部分需要测试的控件的属性信息,有助于尽可能测试用例的撰写,以及提高测试成功率。
在得到上述目标渲染对象之后,需要获取该目标渲染对象的属性信息以生成UI树。具体地,目标渲染对象的属性信息的获取过程可以包括以下步骤:首先,从当前显示界面的元素对象树中获取目标渲染对象对应的第一元素对象;然后,从第一元素对象中提取目标渲染对象的属性信息。
从前述对图5和图6的说明书中可知,元素对象和渲染对象是对应的,渲染对象都会对应一个元素对象。从而可以根据该对应关系在元素对象树中找到目标渲染对象的属性信息。
可选地,根据目标渲染对象的属性信息生成UI树,包括:首先,从元素对象树中获取第一元素对象相关联的第二元素对象,第二元素对象是与第一元素对象位于同一分支上的元素对象;然后,根据目标渲染对象的属性信息和第二元素对象中的属性信息,生成UI树。
本公开实施例可以将相关联的第二元素对象的属性信息添加到UI树中,以对控件的定位。
S103:终端设备对UI树进行目标处理,目标处理包括以下至少一种:通过上述连接将UI树发送给测试设备、从UI树中获取目标控件的属性信息,测试设备用于通过UI树生成测试用例,目标控件的属性信息用于执行测试用例。
如果前述第一请求是在测试用例的开发过程中发起的,那么,终端设备需要将UI树发送给测试设备,以测试人员开发测试用例。与S103对应地,参照图3所示,终端设备可以通过该连接接收终端设备发送的UI树。
如果前述第一请求是在测试用例的执行过程中发起的,那么,终端设备不需要将UI树发送给测试设备。但是,终端设备需要从UI树中获取目标控件的属性信息,以执行对目标控件的测试。
图4是本公开实施例提供的一种基于接口服务的测试过程示意图。参照图4所示,测试设备向接口服务发送了多次第一请求。
其中,第一次发送的第一请求中携带有目标控件的属性信息text=“shoots”,以获取目标控件的属性信息ID(控件标识)的取值。其中,“text”是属性信息的类型,“shoots”是属性信息的取值。从而,接口服务可以从应用程序中当前显示界面的UI树中,获取到text属性的取值为“shoots”的控件,作为目标控件,并将该目标控件在UI树中的控件标识ID的取值“XXX”发送给测试设备。
在接收到上述控件标识ID的取值“XXX”之后,测试设备可以向接口服务发送第二次第一请求,其中携带控件标识ID的取值“XXX”,以获取到目标控件的属性信息REC(位置信息)的取值。
在接收到上述REC信息的取值之后,可以测试设备可以向接口服务发送第三次第一请求,其中携带REC信息的取值“XXX”,以使接口服务对应用程序进行操作,实现了对该目标控件的测试。
对应于上文实施例的UI树的处理方法,图8是本公开实施例提供的一种终端设备的结构框图。终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务。为了便于说明,仅示出了与本公开实施例相关的部分。参照图8,上述终端设备200包括:第一请求接收模块201、UI树生成模块202和目标处理模块203。
其中,第一请求接收模块201,用于通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求。
UI树生成模块202,用于响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
目标处理模块203,用于对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
可选地,所述终端设备200还包括:
第二请求接收模块,用于所述接口服务在已启动状态下,接收所述测试设备发送的第二请求,所述第二请求中包括第一端口信息。
连接建立模块,用于响应于所述第二请求,若所述第一端口信息与所述接口服务记录的第二端口信息一致,则建立所述测试设备和所述接口服务之间的连接。
可选地,所述终端设备200还包括:
第三请求接收模块,用于在接收所述测试设备发送的第二请求之前,接收所述测试设备发送的第三请求。
接口服务启动模块,用于响应于所述第三请求,若所述接口服务处于未启动状态,则通过所述终端设备的操作系统,调用所述应用程序中的第一通道接口,以使所述第一通道接口调用所述Flutter框架中的第二通道接口,启动所述接口服务。
第二端口信息发送模块,用于通过所述第二通道接口生成所述接口服务的第二端口信息,并将所述第二端口信息发送给所述测试设备。
可选地,上述UI树生成模块202还用于:
获取所述应用程序中的当前显示界面的渲染对象树。
从所述渲染对象树中获取至少一个可视的目标渲染对象。
根据所述目标渲染对象的属性信息生成所述UI树,每个所述目标渲染对象对应一个控件。
可选地,所述目标渲染对象包括以下至少一种:显示尺寸大于或等于预设尺寸且显示区域在屏幕内的渲染对象、非代理类型的渲染对象。
可选地,所述终端设备200还包括:
第一对象获取模块,用于在根据所述目标渲染对象的属性信息生成所述UI树之前,从所述当前显示界面的元素对象树中获取所述目标渲染对象对应的第一元素对象。
属性信息获取模块,用于从所述第一元素对象中提取所述目标渲染对象的属性信息。
可选地,所述第一对象获取模块还用于:
从所述元素对象树中获取所述第一元素对象相关联的第二元素对象,所述第二元素对象是与所述第一元素对象位于同一分支上的元素对象。
根据所述目标渲染对象的属性信息和所述第二元素对象中的属性信息,生成所述UI树。
本实施例提供的终端设备,可用于执行上述图2所示的方法实施例中终端设备执行的步骤,其实现原理和技术效果类似,本实施例此处不再赘述。
对应于上文实施例的UI树的处理方法,图9是本公开实施例提供的一种测试设备的结构框图,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中。为了便于说明,仅示出了与本公开实施例相关的部分。参照图9,上述测试设备300包括:第一请求发送模块301和UI树接收模块302。
其中,第一请求发送模块301,用于通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求。
UI树接收模块302,用于通过所述连接接收所述终端设备发送的UI树,所述UI树是通过所述接口服务调用Flutter框架,针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
可选地,所述测试设备300还包括:
第三请求发送模块,用于向所述终端设备发送第三请求,所述第三请求用于启动所述接口服务。
第二端口信息接收模块,用于接收所述终端设备发送的所述接口服务的第二端口信息,所述第二端口信息是所述测试设备在所述接口服务处于已启动状态时发送的。
可选地,所述测试设备300还包括:
第二请求发送模块,用于向所述终端设备发送第二请求,所述第二请求中包括第一端口信息,所述第二请求用于通过所述第一端口信息建立所述连接,在所述第一端口信息与所述第二端口信息一致时,所述连接建立成功。
本实施例提供的测试设备,可用于执行上述图2所示的方法实施例中测试设备执行的步骤,其实现原理和技术效果类似,本实施例此处不再赘述。
图10是本公开实施例提供的一种电子设备600的结构框图。该电子设备可以为前述终端设备或前述测试设备。该电子设备600包括存储器602和至少一个处理器601。
其中,存储器602存储计算机执行指令。
至少一个处理器601执行存储器602存储的计算机执行指令,使得电子设备601实现前述UI树处理方法中终端设备或测试设备执行的步骤。
此外,该电子设备还可以包括接收器603和发送器604,接收器603用于接收从其余装置或设备的信息,并转发给处理器601,发送器604用于将信息发送到其余装置或设备。
进一步地,参考图11,其示出了适于用来实现本公开实施例的电子设备900的结构示意图,该电子设备900可以为终端设备。其中,终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,简称PDA)、平板电脑(Portable Android Device,简称PAD)、便携式多媒体播放器(Portable MediaPlayer,简称PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图11示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图11所示,电子设备900可以包括处理装置(例如中央处理器、图形处理器等)901,其可以根据存储在只读存储器(Read Only Memory,简称ROM)902中的程序或者从存储装置908加载到随机访问存储器(Random Access Memory,简称RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有电子设备900操作所需的各种程序和数据。处理装置901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
通常,以下装置可以连接至I/O接口905:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置906;包括例如液晶显示器(Liquid CrystalDisplay,简称LCD)、扬声器、振动器等的输出装置907;包括例如磁带、硬盘等的存储装置908以及通信装置909。通信装置909可以允许电子设备900与其他设备进行无线或有线通信以交换数据。虽然图11示出了具有各种装置的电子设备900,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置909从网络上被下载和安装,或者从存储装置908被安装,或者从ROM902被安装。在该计算机程序被处理装置901执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述实施例所示的方法。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalArea Network,简称LAN)或广域网(Wide Area Network,简称WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本公开实施例还提供了一种UI树处理系统,包括前述终端设备和测试设备。
本公开实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,使计算设备实现如前述UI树处理方法。
本公开实施例还提供了一种计算机程序,所述计算机程序用于实现如前述UI树处理方法。
在第一方面的第一种示例中,本公开实施例提供了一种UI树的处理方法,应用于终端设备,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述方法包括:
通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求。
响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
基于第一方面的第一种示例,在第一方面的第二种示例中,所述测试设备和所述接口服务之间的连接是通过以下步骤预先建立的:
所述接口服务在已启动状态下,接收所述测试设备发送的第二请求,所述第二请求中包括第一端口信息。
响应于所述第二请求,若所述第一端口信息与所述接口服务记录的第二端口信息一致,则建立所述测试设备和所述接口服务之间的连接。
基于第一方面的第二种示例,在第一方面的第三种示例中,所述接收所述测试设备发送的第二请求之前,还包括:
接收所述测试设备发送的第三请求。
响应于所述第三请求,若所述接口服务处于未启动状态,则通过所述终端设备的操作系统,调用所述应用程序中的第一通道接口,以使所述第一通道接口调用所述Flutter框架中的第二通道接口,启动所述接口服务。
通过所述第二通道接口生成所述接口服务的第二端口信息,并将所述第二端口信息发送给所述测试设备。
基于第一方面的第一至第三任一种示例,在第一方面的第四种示例中,所述通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,包括:
获取所述应用程序中的当前显示界面的渲染对象树。
从所述渲染对象树中获取至少一个可视的目标渲染对象。
根据所述目标渲染对象的属性信息生成所述UI树,每个所述目标渲染对象对应一个控件。
基于第一方面的第四种示例,在第一方面的第五种示例中,所述目标渲染对象包括以下至少一种:显示尺寸大于或等于预设尺寸且显示区域在屏幕内的渲染对象、非代理类型的渲染对象。
基于第一方面的第四种示例,在第一方面的第六种示例中,所述根据所述目标渲染对象的属性信息生成所述UI树之前,还包括:
从所述当前显示界面的元素对象树中获取所述目标渲染对象对应的第一元素对象。
从所述第一元素对象中提取所述目标渲染对象的属性信息。
基于第一方面的第六种示例,在第一方面的第七种示例中,所述根据所述目标渲染对象的属性信息生成所述UI树,包括:
从所述元素对象树中获取所述第一元素对象相关联的第二元素对象,所述第二元素对象是与所述第一元素对象位于同一分支上的元素对象。
根据所述目标渲染对象的属性信息和所述第二元素对象中的属性信息,生成所述UI树。
在第二方面的第一种示例中,提供了一种UI树的处理方法,应用于测试设备,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述方法包括:
通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求。
通过所述连接接收所述终端设备发送的UI树,所述UI树是通过所述接口服务调用Flutter框架,针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
基于第二方面的第一种示例,在第二方面的第二种示例中,所述方法还包括:
向所述终端设备发送第三请求,所述第三请求用于启动所述接口服务。
接收所述终端设备发送的所述接口服务的第二端口信息,所述第二端口信息是所述测试设备在所述接口服务处于已启动状态时发送的。
基于第三方面的第二种示例,在第三方面的第三种示例中,所述方法还包括:
向所述终端设备发送第二请求,所述第二请求中包括第一端口信息,所述第二请求用于通过所述第一端口信息建立所述连接,在所述第一端口信息与所述第二端口信息一致时,所述连接建立成功。
在第三方面的第一种示例中,提供了一种终端设备,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述终端设备包括:
第一请求接收模块,用于通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求。
UI树生成模块,用于响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
目标处理模块,用于对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
基于第三方面的第一种示例,在第三方面的第二种示例中,所述终端设备还包括:
第二请求接收模块,用于所述接口服务在已启动状态下,接收所述测试设备发送的第二请求,所述第二请求中包括第一端口信息。
连接建立模块,用于响应于所述第二请求,若所述第一端口信息与所述接口服务记录的第二端口信息一致,则建立所述测试设备和所述接口服务之间的连接。
基于第三方面的第二种示例,在第三方面的第三种示例中,所述终端设备还包括:
第三请求接收模块,用于在接收所述测试设备发送的第二请求之前,接收所述测试设备发送的第三请求。
接口服务启动模块,用于响应于所述第三请求,若所述接口服务处于未启动状态,则通过所述终端设备的操作系统,调用所述应用程序中的第一通道接口,以使所述第一通道接口调用所述Flutter框架中的第二通道接口,启动所述接口服务。
第二端口信息发送模块,用于通过所述第二通道接口生成所述接口服务的第二端口信息,并将所述第二端口信息发送给所述测试设备。
基于第三方面的第一至第三任一种示例,在第三方面的第四种示例中,所述UI树生成模块还用于:
获取所述应用程序中的当前显示界面的渲染对象树。
从所述渲染对象树中获取至少一个可视的目标渲染对象。
根据所述目标渲染对象的属性信息生成所述UI树,每个所述目标渲染对象对应一个控件。
基于第三方面的第四种示例,在第三方面的第五种示例中,所述目标渲染对象包括以下至少一种:显示尺寸大于或等于预设尺寸且显示区域在屏幕内的渲染对象、非代理类型的渲染对象。
基于第三方面的第四种示例,在第三方面的第六种示例中,所述终端设备还包括:
第一对象获取模块,用于在根据所述目标渲染对象的属性信息生成所述UI树之前,从所述当前显示界面的元素对象树中获取所述目标渲染对象对应的第一元素对象。
属性信息获取模块,用于从所述第一元素对象中提取所述目标渲染对象的属性信息。
基于第三方面的第六种示例,在第三方面的第七种示例中,所述第一对象获取模块还用于:
从所述元素对象树中获取所述第一元素对象相关联的第二元素对象,所述第二元素对象是与所述第一元素对象位于同一分支上的元素对象。
根据所述目标渲染对象的属性信息和所述第二元素对象中的属性信息,生成所述UI树。
第三方面,根据本公开的一个或多个实施例,提供了一种测试设备,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述测试设备包括:
第一请求发送模块,用于通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求。
UI树接收模块,用于通过所述连接接收所述终端设备发送的UI树,所述UI树是通过所述接口服务调用Flutter框架,针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
基于第四方面的第一种示例,在第四方面的第二种示例中,所述测试设备还包括:
第三请求发送模块,用于向所述终端设备发送第三请求,所述第三请求用于启动所述接口服务。
第二端口信息接收模块,用于接收所述终端设备发送的所述接口服务的第二端口信息,所述第二端口信息是所述测试设备在所述接口服务处于已启动状态时发送的。
基于第四方面的第二种示例,在第四方面的第三种示例中,所述测试设备还包括:
第二请求发送模块,用于向所述终端设备发送第二请求,所述第二请求中包括第一端口信息,所述第二请求用于通过所述第一端口信息建立所述连接,在所述第一端口信息与所述第二端口信息一致时,所述连接建立成功。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (15)

1.一种UI树的处理方法,其特征在于,应用于终端设备,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述方法包括:
通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求;
响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息;
对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
2.根据权利要求1所述的方法,其特征在于,所述测试设备和所述接口服务之间的连接是通过以下步骤预先建立的:
所述接口服务在已启动状态下,接收所述测试设备发送的第二请求,所述第二请求中包括第一端口信息;
响应于所述第二请求,若所述第一端口信息与所述接口服务记录的第二端口信息一致,则建立所述测试设备和所述接口服务之间的连接。
3.根据权利要求2所述的方法,其特征在于,所述接收所述测试设备发送的第二请求之前,还包括:
接收所述测试设备发送的第三请求;
响应于所述第三请求,若所述接口服务处于未启动状态,则通过所述终端设备的操作系统,调用所述应用程序中的第一通道接口,以使所述第一通道接口调用所述Flutter框架中的第二通道接口,启动所述接口服务;
通过所述第二通道接口生成所述接口服务的第二端口信息,并将所述第二端口信息发送给所述测试设备。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,包括:
获取所述应用程序中的当前显示界面的渲染对象树;
从所述渲染对象树中获取至少一个可视的目标渲染对象;
根据所述目标渲染对象的属性信息生成所述UI树,每个所述目标渲染对象对应一个控件。
5.根据权利要求4所述的方法,其特征在于,所述目标渲染对象包括以下至少一种:显示尺寸大于或等于预设尺寸且显示区域在屏幕内的渲染对象、非代理类型的渲染对象。
6.根据权利要求4所述的方法,其特征在于,所述根据所述目标渲染对象的属性信息生成所述UI树之前,还包括:
从所述当前显示界面的元素对象树中获取所述目标渲染对象对应的第一元素对象;
从所述第一元素对象中提取所述目标渲染对象的属性信息。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标渲染对象的属性信息生成所述UI树,包括:
从所述元素对象树中获取所述第一元素对象相关联的第二元素对象,所述第二元素对象是与所述第一元素对象位于同一分支上的元素对象;
根据所述目标渲染对象的属性信息和所述第二元素对象中的属性信息,生成所述UI树。
8.一种UI树的处理方法,其特征在于,应用于测试设备,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述方法包括:
通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求;
通过所述连接接收所述终端设备发送的UI树,所述UI树是通过所述接口服务调用所述Flutter框架,针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
9.一种终端设备,其特征在于,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述Flutter框架内置有接口服务,所述终端设备包括:
第一请求接收模块,用于通过测试设备和所述接口服务之间的连接,接收所述测试设备发送的第一请求;
UI树生成模块,用于响应于所述第一请求,通过所述接口服务调用所述Flutter框架,生成所述应用程序中的当前显示界面的UI树,所述UI树中包括所述当前显示界面中至少一个控件的属性信息;
目标处理模块,用于对所述UI树进行目标处理,所述目标处理包括以下至少一种:通过所述连接将所述UI树发送给所述测试设备、从所述UI树中获取目标控件的属性信息,所述测试设备用于通过所述UI树生成测试用例,所述目标控件的属性信息用于执行所述测试用例。
10.一种测试设备,其特征在于,所述测试设备与终端设备中的接口服务之间建立有连接,所述终端设备上运行的应用程序的用户界面UI采用Flutter框架,所述接口服务内置于所述Flutter框架中,所述测试设备包括:
第一请求发送模块,用于通过所述测试设备和所述接口服务之间的连接,向所述终端设备发送第一请求;
UI树接收模块,用于通过所述连接接收所述终端设备发送的UI树,所述UI树是通过所述接口服务调用所述Flutter框架,针对所述应用程序中的当前显示界面生成的,所述UI树中包括所述当前显示界面中至少一个控件的属性信息。
11.一种终端设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述终端设备实现如权利要求1至7任一项所述的方法。
12.一种测试设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述测试设备实现如权利要求8所述的方法。
13.一种UI树处理系统,其特征在于,包括权利要求9或11所述的终端设备,以及权利要求10或12所述的测试设备。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,使计算设备实现如权利要求1至8任一项所述的方法。
15.一种计算机程序,其特征在于,所述计算机程序用于实现如权利要求1至8任一项所述的方法。
CN202210624702.1A 2022-06-02 2022-06-02 Ui树的处理方法、设备及系统 Pending CN117215904A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210624702.1A CN117215904A (zh) 2022-06-02 2022-06-02 Ui树的处理方法、设备及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210624702.1A CN117215904A (zh) 2022-06-02 2022-06-02 Ui树的处理方法、设备及系统

Publications (1)

Publication Number Publication Date
CN117215904A true CN117215904A (zh) 2023-12-12

Family

ID=89033961

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210624702.1A Pending CN117215904A (zh) 2022-06-02 2022-06-02 Ui树的处理方法、设备及系统

Country Status (1)

Country Link
CN (1) CN117215904A (zh)

Similar Documents

Publication Publication Date Title
CN110990105B (zh) 界面显示方法、装置、电子设备及存储介质
CN109634490B (zh) 一种列表显示方法、装置、设备及存储介质
US11711441B2 (en) Method and apparatus for publishing video synchronously, electronic device, and readable storage medium
CN109308241B (zh) 监听应用程序启动流程方法、装置、终端设备和存储介质
CN113377366B (zh) 控件编辑方法、装置、设备、可读存储介质及产品
CN111026491A (zh) 界面显示方法、装置、电子设备、服务器及存储介质
CN112420217A (zh) 消息推送方法、装置、设备及存储介质
CN111240801A (zh) 生成堆内存快照文件的方法、装置、介质和电子设备
CN113608997B (zh) 一种应用程序内嵌网页的远程调试方法、装置和电子设备
CN111078325A (zh) 应用程序运行方法、装置、电子设备及存储介质
CN112612460B (zh) 接口的封装和调用方法、电子设备、及存储介质
CN113391860B (zh) 服务请求处理方法、装置、电子设备及计算机存储介质
CN111338961B (zh) 应用调试方法及装置、电子设备及存储介质
CN112905220A (zh) 热修复方法、装置、设备及存储介质
CN110347380B (zh) 前后端开发方法及设备
CN117215904A (zh) Ui树的处理方法、设备及系统
CN111324386B (zh) 分身应用程序的启动方法、装置、电子设备及存储介质
CN109669679B (zh) 服务检测及处理方法、装置及电子设备
CN111382038B (zh) 上报业务数据的方法、装置、电子设备及存储介质
CN111367590A (zh) 中断事件处理方法及其装置
US11620170B1 (en) Method, apparatus, device and storage medium for function processing
CN111324888B (zh) 应用程序启动时的验证方法、装置、电子设备及存储介质
US20240089560A1 (en) Video generation method, apparatus, electronic device and storage medium
CN110099122B (zh) 用于发送网络请求的方法和装置
WO2024198981A1 (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