发明内容
发明人发现,由于需要获取控件树中的全部控件以及每个控件的全部属性,因此,造成获取一次控件树的耗时比较长。例如,点击一次刷新,需要2秒左右的时间才能获取到控件树。
本公开一些实施例提出一种获取控件树的方法,包括:
接收计算机发送的获取控件树的请求;
获取所述控件树的各个控件;
根据所述的屏幕尺寸信息和每个控件的边界属性,判断每个控件或每个控件的任一个下级控件是否在屏幕内,
如果所述控件树中的任一个第一控件或所述第一控件的任一个下级控件在屏幕内,保留所述第一控件,如果所述控件树中的任一个第二控件和所述第二控件的任一个下级控件均不在屏幕内,抛弃所述第二控件;
将所述控件树中的保留下来的控件作为本次获取的第一控件树发送给所述计算机。
在一些实施例中,该方法还包括:如果所述控件树中的任一个第三控件的一部分在屏幕内,修正所述第三控件的边界属性,使所述第三控件在屏幕内,并保留所述第三控件。
在一些实施例中,该方法还包括:获取所述控件树的各个控件之后,获取每个控件的预设的部分属性,在发送第一控件树时,还发送第一控件树中各个控件的部分属性。
在一些实施例中,该方法还包括:判断每个控件或每个控件的任一个下级控件是否在屏幕内,包括:从所述控件树的叶子控件开始,按照从下向上的顺序,依次地获取每个控件的预设的部分属性并判断每个控件或每个控件的任一个下级控件是否在屏幕内。
在一些实施例中,该方法还包括:利用可打印字符(如Base64)编码方式对获取的每个控件的预设的部分属性进行处理。
在一些实施例中,每个控件的预设的部分属性包括:控件的标识属性和边界属性,还包括:控件的类型属性、名称属性、可编辑属性、可点击属性中的一个或多个。
在一些实施例中,该方法还包括:判断本次获取的第一控件树与上次获取的第二控件树是否相同,如果相同,发送控件树相同的指示信息给所述计算机;如果不同,再将所述控件树中的保留下来的控件作为本次获取的第一控件树发送给所述计算机。
在一些实施例中,判断本次获取的第一控件树与上次获取的第二控件树是否相同,包括:计算本次获取的第一控件树的摘要信息和上次获取的第二控件树的摘要信息,并判断第一控件树的摘要信息和第二控件树的摘要信息是否相同。
本公开一些实施例提出一种移动终端,包括:
存储器;以及
耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行任一个实施例所述的获取控件树的方法。
本公开一些实施例提出一种移动终端,包括:
接收模块,被配置为接收计算机发送的获取控件树的请求;
获取模块,被配置为获取所述控件树的各个控件;
判断模块,被配置为根据所述移动终端的屏幕尺寸信息和每个控件的边界属性,判断每个控件或每个控件的任一个下级控件是否在屏幕内,
处理模块,被配置为如果所述控件树中的任一个第一控件或所述第一控件的任一个下级控件在屏幕内,保留所述第一控件,如果所述控件树中的任一个第二控件和所述第二控件的任一个下级控件均不在屏幕内,抛弃所述第二控件;
发送模块,被配置为将所述控件树中的保留下来的控件作为本次获取的第一控件树发送给所述计算机。
本公开一些实施例提出一种获取控件树的系统,包括:
移动终端;以及
计算机,被配置为向移动终端发送获取控件树的请求,接收移动终端返回的控件树或控件树相同的指示信息。
本公开一些实施例提出一种非瞬时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一实施例所述的获取控件树的方法的步骤。
在本公开实施例中,移动终端将当前显示需要的控件树中的部分控件发送给计算机,在不影响显示需要的前提下,减少获取控件树所需的时间,平均耗时达到毫秒(ms)级别,例如,100ms左右。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。
除非特别说明,否则,本公开中的“第一”“第二”等描述用来区分不同的对象,并不用来表示大小或时序等含义。
图1示出本公开一些实施例的获取控件树的方法的流程示意图。
如图1所示,该实施例的获取控件树的方法包括:步骤110-170a/b。
在步骤110,移动终端与计算机建立Socket(套接字)长连接,用于移动终端与计算机之间传输信息。
移动终端创建一个socket服务端(socket server),计算机建立socket客户端(socket client),socket服务端与socket客户端建立Socket长连接。Socket是一种通讯协议。
移动终端与计算机在一定时间内或一个业务过程中,在最开始的时候创建一次连接,后面就会保持该连接,任何一次控件树的请求到来的时候都能够将控件树及时地返回去。通过Socket长连接传输信息,减少获取控件树所需的时间。
此外,移动终端与计算机之间还可以通过http(Hyper Text Transfer Protocol,超文本传输协议)方式传输信息。http是应用层协议,在信息传输的时候需要封装数据包,并遵循特定地连接创建流程。
如果需要更短的耗时,可以采用Socket长连接通信方式,否则,也可以采用http通信方式。
计算机例如为个人计算机,但不限于此。台式机、笔记本电脑、平板电脑等都属于个人计算机。
在步骤120,计算机例如可以定时发送获取控件树的请求,移动终端接收计算机发送的获取控件树的请求,然后开始获取控件树,具体参见后续步骤。
例如,计算机的socket客户端例如每500ms向移动终端的socket服务端发送获取控件树的请求。
在步骤130,移动终端获取控件树的各个控件。
例如,移动终端通过递归方式获取控件树的各个控件。
例如,移动终端从服务器等第三方获取控件树的各个控件和属性等信息。
控件树包括一个根控件(也称根节点)和若干子控件(也称子节点)等控件。所有控件基于根控件以树型结构彼此级联起来。通过获取控件树的各个控件可以确定该控件树的树型结构。根据级联层次的不同,控件又分为叶子控件和非叶子控件。其中,叶子控件的下面没有级联其他控件,非叶子控件的下面级联至少一个其他控件。
在步骤140,移动终端获取每个控件的预设的部分属性。
获取的控件的部分属性可以存储在数据结构体中。
控件的预设的部分属性属于控件的基本属性,例如包括:控件的标识属性id和边界属性bounds,根据需要还包括:控件的类型属性class、名称属性name、可编辑属性isEditable、可点击属性isClickble中的一个或多个。其中,控件的类型属性例如包括文本框控件、按钮控件、窗体控件等,但不限于此。
控件属性的获取是控件树获取中非常耗时的。每个控件有很多属性,每获取一个属性都有一定耗时,在控件树的获取过程中,通过获取控件的部分属性,其余属性不获取,属性的获取时间平均缩短至原来的1/4,进一步减少获取控件树所需的时间。
移动终端从控件树的叶子控件开始,按照从下向上的顺序,依次地获取每个控件的预设的部分属性。
在步骤150,移动终端根据移动终端的屏幕尺寸信息和每个控件的边界属性,判断每个控件或每个控件的任一个下级控件是否在屏幕内。
控件的下级控件包括直接级联该控件的下级控件和间接级联该控件的下级控件。
移动终端的屏幕尺寸信息例如可以是屏幕的宽高信息或者可以转换成宽高信息的分辨率信息等。控件的边界属性例如可以是控件的各个顶点的x、y坐标等。
例如,如果控件的全部或一部分在屏幕内,认为该控件在屏幕内。其中,控件的一部分在屏幕内,是控件在屏幕内的一种特例,需要进行修正处理,具体参见步骤150c。
移动终端从控件树的叶子控件开始,按照从下向上的顺序,依次地获取每个控件的预设的部分属性并判断每个控件或每个控件的任一个下级控件是否在屏幕内。
在步骤150a,如果控件树中的任一个第一控件或第一控件的任一个下级控件在屏幕内,保留第一控件,本次需要获取该第一控件。
也即,如果第一控件自身在屏幕内,保留第一控件;如果第一控件自身不在屏幕内,但是,第一控件有若干下级控件在屏幕内,仍然保留第一控件。
在步骤150b,如果控件树中的任一个第二控件和第二控件的任一个下级控件均不在屏幕内,抛弃第二控件,本次不需要获取该第二控件。
也即,如果第二控件自身不在屏幕内,并且,第二控件的下级控件也不在屏幕内,则抛弃第二控件。
移动终端将当前显示需要的控件树中的部分控件发送给计算机,在不影响显示需要的前提下,减少获取控件树所需的时间,平均耗时达到毫秒(ms)级别,例如,100ms左右。
在步骤150c,进一步判断,如果控件树中的任一个第三控件的一部分在屏幕内,修正第三控件的边界属性,使第三控件在屏幕内,并保留第三控件。
例如,修正第三控件的各个顶点的x、y坐标的数值,使各个顶点的x/y坐标的数值均小于等于屏幕的宽/高信息。
通过修正控件的边界,保证控件的有效性。避免出现用户点击部分显示的控件,但控件没有响应的情况,提升用户体验。
在步骤160,利用可打印字符编码方式,如Base64编码方式,对获取的每个控件的预设的部分属性进行处理。
Base64是一种用于传输8Bit字节码的编码方式之一,基于64个可打印字符来表示二进制数据的方法。
各个控件以及控件的预设的部分属性可转换成xml格式,有利于区分各个控件的层次关系。
如果属性里面含有特殊字符,会影响解析过程。通过Base64编码方式对控件属性进行处理,将控件中的可能包含特殊字符的属性信息转换为普通字符,预防出现解析错误。
在步骤170,将控件树中的保留下来的控件作为本次获取的第一控件树,进一步,判断本次获取的第一控件树与上次获取的第二控件树是否相同。
计算本次获取的第一控件树的摘要信息和上次获取的第二控件树的摘要信息,通过判断第一控件树的摘要信息和第二控件树的摘要信息是否相同,来判断本次获取的第一控件树与上次获取的第二控件树是否相同。如果第一控件树的摘要信息和第二控件树的摘要信息相同,认为本次获取的第一控件树与上次获取的第二控件树相同。
例如,计算本次获取的第一控件树的MD5值和上次获取的第二控件树的MD5值,如果第一控件树的MD5值和第二控件树的MD5值相同,认为本次获取的第一控件树与上次获取的第二控件树相同。其中,MD5表示信息摘要算法(Message-Digest Algorithm),是一种被广泛使用的密码散列函数。
在步骤170a,如果本次获取的第一控件树与上次获取的第二控件树相同,发送控件树相同的指示信息,如“equal”给计算机,表明本次获取的第一控件树与上次获取的第二控件树相同。
在两次获取的控件树相同的情况下,第二次不重复发送控件树,减少第二次获取控件树所需的时间。发送一个单词的指示信息相对于发送几千KB的控件树,减少耗时。
在步骤170b,如果本次获取的第一控件树与上次获取的第二控件树不同,将控件树中的保留下来的控件作为本次获取的第一控件树和第一控件树中每个控件的部分属性发送给计算机。
计算机接收移动终端发送的各个控件树,利用各个控件树进行自动化平台建设,自动化集成,控件树信息分析等工作。
需要说明的是,上述的步骤110-170a/b可以都执行,也可以根据需要执行其中的部分步骤。例如,为了减少获取控件树的耗时,可以执行步骤110、140、150~150a/b、170~170a中的一个步骤或多个步骤的组合;为了保证控件的有效性,可以执行步骤150c;为了预防出现解析错误,可以执行步骤160。
图2示出本公开一些实施例的获取控件树的系统的示意图。
如图2所示,该实施例的获取控件树的系统200包括:移动终端210以及计算机220。
计算机220,被配置为向移动终端210发送获取控件树的请求,接收移动终端210返回的控件树或控件树相同的指示信息。
移动终端210将结合图3-4进行描述。
图3为本公开一些实施例的移动终端的结构示意图。
如图3所示,该实施例的移动终端210包括:存储器310以及耦接至该存储器310的处理器320。处理器320被配置为基于存储在存储器310中的指令,执行前述任意一些实施例中的获取控件树的方法,具体参见前述实施例,这里不再赘述。
其中,存储器310例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)以及其他程序等。
移动终端210还可以包括输入输出接口330、网络接口340、存储接口350等。这些接口330,340,350以及存储器310和处理器320之间例如可以通过总线360连接。其中,输入输出接口330为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口340为各种联网设备提供连接接口。存储接口350为SD卡、U盘等外置存储设备提供连接接口。
图4为本公开另一些实施例的移动终端的结构示意图。
如图4所示,该实施例的移动终端210包括:模块410-450,还可以包括模块460-490中的一个或多个。
接收模块410,被配置为接收计算机发送的获取控件树的请求。
获取模块420,被配置为获取控件树的各个控件。
判断模块430,被配置为根据移动终端的屏幕尺寸信息和每个控件的边界属性,判断每个控件或每个控件的任一个下级控件是否在屏幕内。例如,从所述控件树的叶子控件开始,按照从下向上的顺序,依次地获取每个控件的预设的部分属性并判断每个控件或每个控件的任一个下级控件是否在屏幕内。
处理模块440,被配置为如果控件树中的任一个第一控件或第一控件的任一个下级控件在屏幕内,保留第一控件,如果控件树中的任一个第二控件和第二控件的任一个下级控件均不在屏幕内,抛弃第二控件。
发送模块450,被配置为将控件树中的保留下来的控件作为本次获取的第一控件树发送给计算机。
在一些实施例中,移动终端210还包括连接模块460,被配置为与计算机建立Socket长连接,用于与计算机之间传输信息,例如,创建一个socket服务端,并与计算机建立的socket客户端建立Socket长连接。
在一些实施例中,移动终端210还包括修正模块470,被配置为如果控件树中的任一个第三控件的一部分在屏幕内,修正第三控件的边界属性,使第三控件在屏幕内,并保留第三控件。
在一些实施例中,移动终端210还包括属性模块480,被配置为从控件树的叶子控件开始,按照从下向上的顺序,依次地获取每个控件的预设的部分属性。发送模块450在发送第一控件树时,还发送第一控件树中的每个控件的部分属性。
在一些实施例中,移动终端210还包括编码模块490,被配置为利用可打印字符编码方式,如Base64编码方式,对获取的每个控件的预设的部分属性进行处理。
在一些实施例中,判断模块430,还被配置为判断本次获取的第一控件树与上次获取的第二控件树是否相同;发送模块450,还被配置为如果相同,发送控件树相同的指示信息给计算机;如果不同,将控件树中的保留下来的控件作为本次获取的第一控件树发送给计算机。
本领域内的技术人员应当明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机程序代码的非瞬时性计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。