可左右滑动选省市

元素的选取方法、系统、终端设备和可读存储介质

更新时间:2024-11-01
元素的选取方法、系统、终端设备和可读存储介质 专利申请类型:实用新型专利;
地区:广东-深圳;
源自:深圳高价值专利检索信息库;

专利名称:元素的选取方法、系统、终端设备和可读存储介质

专利类型:实用新型专利

专利申请号:CN202311656487.4

专利申请(专利权)人:九科信息技术(深圳)有限公司
权利人地址:广东省深圳市福田区梅林街道孖岭社区凯丰路10号翠林大厦7层068号

专利发明(设计)人:邓兴连,万正勇

专利摘要:本申请适用于计算机技术领域,提供了一种元素的选取方法、系统、终端设备和可读存储介质。本申请实施例中,RPA应用与Java应用建立通信连接,获取鼠标位置,并向目标Java应用发送鼠标位置,根据目标Java应用返回的鼠标位置下的所有Java元素的元素信息,确定出目标元素,并获取目标Java元素的元素信息以及父节点元素信息,从而得到目标Java元素的元素标识。采用本申请实施例,可以在Linux操作系统下实现自动获取Java元素的元素标识。

主权利要求:
1.一种元素的选取方法,其特征在于,所述元素的选取方法应用于元素的选取系统,所述系统包括RPA应用以及Java应用,所述方法包括:所述RPA应用与所述Java应用建立通信连接;
所述RPA应用获取鼠标位置,并判断所述鼠标位置对应的应用是否为Java类型的应用;
当所述鼠标位置对应的应用为Java类型的应用时,所述RPA应用接收对应的目标Java应用的JavaID,并将所述鼠标位置通过所述JavaID发送至所述目标Java应用,所述目标Java应用为鼠标位置对应的所述Java应用;
所述目标Java应用接收所述鼠标位置,获取所述鼠标位置下的所有Java元素的元素信息,并向所述RPA应用返回所有所述Java元素的元素信息;
所述RPA应用接收所有所述Java元素的元素信息,基于所有所述Java元素的元素信息确定出目标Java元素,并向所述目标Java应用发送查询请求;
所述目标Java应用基于所述查询请求查询所述目标Java元素的父节点元素信息,并根据所述目标Java元素的元素信息以及所述父节点元素信息,生成所述目标Java元素的元素标识;
所述RPA应用接收所述目标Java元素的元素标识;
其中,所述RPA应用与所述Java应用建立通信连接,包括:所述RPA应用加载BitWorkerBridge.dll,并对所述BitWorkerBridge.dll进行初始化,生成RPAID;
所述RPA应用启动独立线程进行监听dbus消息,并广播第一异步消息,所述第一异步消息的内容包括所述RPAID;
所有所述Java应用接收到所述第一异步消息后,均向所述RPA应用返回第二异步消息,所述第二异步消息的内容包括每个所述Java应用对应的JavaID;
所述RPA应用接收到所述第二异步消息后,创建与所述Java应用之间的共享内存,将所述RPAID与所述JavaID作为所述共享内存的标识符,并向所述JavaID对应的Java应用发送同步消息,所述同步消息的内容包括所述标识符;
所述Java应用读取所述标识符,获取所述共享内存,并向所述共享内存中写入确定消息;
所述RPA应用读取所述共享内存的所述确定消息,确定与所述Java应用成功建立通信连接。
2.如权利要求1所述的元素的选取方法,其特征在于,所述方法还包括:所述RPA应用创建线程锁,并在向所述共享内存写入消息前给所述共享内存上线程锁;
所述Java应用创建线程锁,并在读取所述共享内存内的消息前给所述共享内存上线程锁;
所述Java应用在向所述共享内存写入消息后,将所述共享内存释放线程锁;
所述RPA应用在读取所述共享内存内的消息后,将所述共享内存释放线程锁。
3.如权利要求1所述的元素的选取方法,其特征在于,在所述RPA应用与所述Java应用建立通信连接之前,所述方法还包括:所述Java应用加载AcessBridge.jar,并通过所述AcessBridge.jar加载BitWorkerJavaBridge.dll;
所述Java应用对所述BitWorkerJavaBridge.dll进行初始化,生成所述JavaID;
所述Java应用广播所述JavaID,并启动独立线程来监听dbus消息。
4.如权利要求1所述的元素的选取方法,其特征在于,在所述RPA应用接收所述目标Java元素的元素标识之后,所述方法还包括:所述RPA应用根据所述元素标识,获取窗口句柄,并向所述元素标识对应的Java应用发送所述窗口句柄;
所述Java应用接收所述窗口句柄后向所述RPA应用返回窗口信息;
所述RPA应用根据所述窗口信息获取子节点元素信息,并判断所述子节点元素信息对应的元素是否满足目标元素特征;
当查找到满足所述目标元素特征的Java元素,则所述RPA应用将满足所述目标元素特征的所述Java元素确定为目标元素。
5.如权利要求1所述的元素的选取方法,其特征在于,所述RPA应用获取鼠标位置,并判断所述鼠标位置对应的应用是否为Java类型的应用,包括:所述RPA应用获取所述鼠标位置以及所述鼠标位置下的窗口句柄,并向与所述RPA应用通信连接的所有所述Java应用发送询问消息;
所有所述Java应用接收所述询问消息,并判断所述Java应用是否包含所述窗口句柄对应的窗口;
包含所述窗口的所述Java应用向所述RPA应用返回确认消息,不包含所述窗口的所述Java应用向所述RPA应用返回否认消息;
所述RPA应用基于所述确认消息以及所述否认消息判断所述鼠标位置对应的应用是否为Java类型的应用。
6.如权利要求1所述的元素的选取方法,其特征在于,所述RPA应用获取鼠标位置,并判断所述鼠标位置对应的应用是否为Java类型的应用,包括:所述RPA应用获取所述鼠标位置对应的应用的应用名称,并根据所述应用名称判断对应的应用是否为Java类型的应用。
7.一种元素的选取系统,其特征在于,所述系统包括RPA应用以及Java应用;
所述RPA应用用于与所述Java应用建立通信连接;
所述RPA应用还用于获取鼠标位置,并判断所述鼠标位置对应的应用是否为Java类型的应用;
当所述鼠标位置对应的应用为Java类型的应用时,所述RPA应用还用于接收对应的目标Java应用的JavaID,并将所述鼠标位置通过所述JavaID发送至所述目标Java应用,所述目标Java应用为鼠标位置对应的所述Java应用;
所述目标Java应用用于接收所述鼠标位置,获取所述鼠标位置下的所有Java元素的元素信息,并向所述RPA应用返回所有所述Java元素的元素信息;
所述RPA应用还用于接收所有所述Java元素的元素信息,基于所有所述Java元素的元素信息确定出目标Java元素,并向所述目标Java应用发送查询请求;
所述目标Java应用还用于基于所述查询请求查询所述目标Java元素的父节点元素信息,并根据所述目标Java元素的元素信息以及所述父节点元素信息,生成所述目标Java元素的元素标识;
所述RPA应用还用于接收所述目标Java元素的元素标识;
其中,所述RPA应用用于与所述Java应用建立通信连接,包括:所述RPA应用加载BitWorkerBridge.dll,并对所述BitWorkerBridge.dll进行初始化,生成RPAID;
所述RPA应用启动独立线程进行监听dbus消息,并广播第一异步消息,所述第一异步消息的内容包括所述RPAID;
所有所述Java应用接收到所述第一异步消息后,均向所述RPA应用返回第二异步消息,所述第二异步消息的内容包括每个所述Java应用对应的JavaID;
所述RPA应用接收到所述第二异步消息后,创建与所述Java应用之间的共享内存,将所述RPAID与所述JavaID作为所述共享内存的标识符,并向所述JavaID对应的Java应用发送同步消息,所述同步消息的内容包括所述标识符;
所述Java应用读取所述标识符,获取所述共享内存,并向所述共享内存中写入确定消息;
所述RPA应用读取所述共享内存的所述确定消息,确定与所述Java应用成功建立通信连接。
8.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述元素的选取方法的步骤。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述元素的选取方法的步骤。 说明书 : 元素的选取方法、系统、终端设备和可读存储介质技术领域[0001] 本申请属于计算机技术领域,尤其涉及一种元素的选取方法、系统、终端设备和可读存储介质。背景技术[0002] RPA(RoboticProcessAutomation)是一种用于自动化规则化、重复性高的工作流程的技术。RPA可以模拟人类在计算机上执行的操作,从而实现对各种应用程序的自动化。在Java自动化中,RPA可以用于自动化测试、构建、部署等环节,提高开发效率,减少人为错误,缩短开发周期。而利用RPA技术实现Java自动化的基础是实现Java元素自动选取,而实现Java元素自动选取则需要确定目标元素的元素标识(包括坐标以及节点层级信息)。[0003] 在相关技术中,Java自动化技术一般都是在MicrosoftWindows操作系统下实现,而在Linux操作系统下,则缺少自动获取Java元素的元素标识的方法。发明内容[0004] 本申请实施例提供一种元素的选取方法、系统、终端设备和可读存储介质,可以解决相关技术中无法在Linux操作系统下实现自动获取Java元素的元素标识的问题。[0005] 第一方面,本申请实施例提供了一种元素的选取方法,所述元素的选取方法应用于元素的选取系统,所述系统包括RPA应用以及Java应用,所述方法包括:[0006] 所述RPA应用与所述Java应用建立通信连接;[0007] 所述RPA应用获取鼠标位置,并判断所述鼠标位置对应的应用是否为所述Java应用;[0008] 当所述鼠标位置对应的应用为所述Java应用时,所述RPA应用接收对应的目标Java应用的JavaID,并将所述鼠标位置通过所述JavaID发送至所述目标Java应用,所述目标Java应用为鼠标位置对应的所述Java应用;[0009] 所述目标Java应用接收所述鼠标位置,获取所述鼠标位置下的所有Java元素的元素信息,并向所述RPA应用返回所有所述Java元素的元素信息;[0010] 所述RPA应用接收所有所述Java元素的元素信息,基于所有所述Java元素的元素信息确定出目标Java元素,并向所述目标Java应用发送查询请求;[0011] 所述目标Java应用基于所述查询请求查询所述目标Java元素的父节点元素信息,并根据所述目标Java元素的元素信息以及所述父节点元素信息,生成所述目标Java元素的元素标识;[0012] 所述RPA应用接收所述目标Java元素的元素标识。[0013] 第二方面,本申请实施例提供了一种元素的选取系统,所述系统包括RPA应用以及Java应用;[0014] 所述RPA应用用于与所述Java应用建立通信连接;[0015] 所述RPA应用还用于获取鼠标位置,并判断所述鼠标位置对应的应用是否为所述Java应用;[0016] 当所述鼠标位置对应的应用为所述Java应用时,所述RPA应用还用于接收对应的目标Java应用的JavaID,并将所述鼠标位置通过所述JavaID发送至所述目标Java应用,所述目标Java应用为鼠标位置对应的所述Java应用;[0017] 所述目标Java应用用于接收所述鼠标位置,获取所述鼠标位置下的所有Java元素的元素信息,并向所述RPA应用返回所有所述Java元素的元素信息;[0018] 所述RPA应用还用于接收所有所述Java元素的元素信息,基于所有所述Java元素的元素信息确定出目标Java元素,并向所述目标Java应用发送查询请求;[0019] 所述目标Java应用还用于基于所述查询请求查询所述目标Java元素的父节点元素信息,并根据所述目标Java元素的元素信息以及所述父节点元素信息,生成所述目标Java元素的元素标识;[0020] 所述RPA应用还用于接收所述目标Java元素的元素标识。[0021] 第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述元素的选取方法的步骤。[0022] 第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述元素的选取方法的步骤。[0023] 第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述元素的选取方法。[0024] 本申请实施例与现有技术相比的有益效果是:本申请实施例中,RPA应用与Java应用建立通信连接,获取鼠标位置,并向目标Java应用发送鼠标位置,根据目标Java应用返回的鼠标位置下的所有Java元素的元素信息,确定出目标元素,并获取目标Java元素的元素信息以及父节点元素信息,从而得到目标Java元素的元素标识。采用本申请实施例,可以在Linux操作系统下实现自动获取Java元素的元素标识。附图说明[0025] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0026] 图1是本申请实施例提供的一种元素的选取方法的实现流程示意图;[0027] 图2是本申请实施例提供的一种元素的选取系统的结构示意图;[0028] 图3是本申请实施例提供的终端设备的结构示意图。具体实施方式[0029] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护。[0030] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“包括”、“包含”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、终端、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。在本申请的权利要求书、说明书以及说明书附图中的术语,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实时的关系或者顺序。[0031] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其他实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其他实施例相结合。[0032] RPA(RoboticProcessAutomation)是一种用于自动化规则化、重复性高的工作流程的技术。RPA可以模拟人类在计算机上执行的操作,从而实现对各种应用程序的自动化。在Java自动化中,RPA可以用于自动化测试、构建、部署等环节,提高开发效率,减少人为错误,缩短开发周期。而利用RPA技术实现Java自动化的基础是实现Java元素自动选取,而实现Java元素自动选取则需要确定目标元素的元素标识(包括坐标以及节点层级信息)。[0033] 在相关技术中,Java自动化技术一般都是在MicrosoftWindows操作系统下实现,而在Linux操作系统下,则缺少自动获取Java元素的元素标识的方法。[0034] 有鉴于此,本申请实施例中,RPA应用与Java应用建立通信连接,获取鼠标位置,并向目标Java应用发送鼠标位置,根据目标Java应用返回的鼠标位置下的所有Java元素的元素信息,确定出目标元素,并获取目标Java元素的元素信息以及父节点元素信息,从而得到目标Java元素的元素标识。采用本申请实施例,可以在Linux操作系统下实现自动获取Java元素的元素标识。[0035] 为了说明本申请的技术方案,下面通过具体实施例来进行说明。[0036] 图1示出了本申请实施例提供的一种元素的选取方法的实现流程示意图,该方法可以应用于终端设备上。终端设备可以是手机、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobilepersonalcomputer,UMPC)、上网本等。[0037] 上述元素的选取方法可以应用于元素的选取系统,元素的选取系统可以包括RPA应用以及一个或多个Java应用。[0038] 具体的,上述元素的选取方法可以包括以下步骤S101至步骤S107。[0039] 步骤S101,RPA应用与Java应用建立通信连接。[0040] 在本申请的实施方式中,在RPA应用与Java应用交互之前,需要先建立RPA应用与Java应用之间的通信连接。RPA应用可以与一个或多个Java应用建立通信连接。[0041] 步骤S102,RPA应用获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用。[0042] 用户可以移动鼠标,使交互界面上的鼠标移动到不同位置,例如可以使鼠标移动到Java应用上,也可以移动到非Java应用上。[0043] 在本申请的实施方式中,RPA应用可以监听鼠标事件,例如鼠标移动、鼠标点击等。当鼠标移动事件发生时,RPA应用可以获取鼠标的位置信息,并根据鼠标位置,通过获取鼠标位置对应的应用的应用名称来判断鼠标位置对应的应用是否为Java应用。RPA应用也可以与Java应用交互,获取交互结果,根据交互结果来判断鼠标位置对应的应用是否为Java应用。[0044] 步骤S103,当鼠标位置对应的应用为Java应用时,RPA应用接收对应的目标Java应用的JavaID,并将鼠标位置通过JavaID发送至目标Java应用。[0045] 其中,目标Java应用为鼠标位置对应的Java应用。[0046] 在本申请的实施方式中,当RPA应用判断出鼠标位置对应的应用为Java应用时,此时目标Java应用可以向RPA应用返回目标Java应用的JavaID。RPA应用可以根据该JavaID,通过通信连接向目标Java应用发送鼠标位置。[0047] 步骤S104,目标Java应用接收鼠标位置,获取鼠标位置下的所有Java元素的元素信息,并向RPA应用返回所有Java元素的元素信息。[0048] 其中,元素信息可以用于描述Java类中每个元素的详细信息,例如可以包括name、role、description、depth、index、virtualname、rect等。需要了解的是,在Java应用的窗口中,鼠标位置下可能会有多个Java元素。例如某些窗口中放置了多个元素(如按钮、文本框等),并且这些元素重叠或相邻,那么在特定的鼠标位置,可能会有多个元素位于鼠标下。[0049] 在本申请的实施方式中,目标Java应用接收鼠标位置后,可以通过调用AcessBridge.jar中的方法,获取该鼠标位置下所有元素的元素信息,并通过通信连接向RPA应用返回所有Ja va元素的元素信息。具体的,目标Java应 用的BitWorkerJavaBridge.dll与AcessBridge.jar通过JNI技术相互调用。AcessBridge.jar运行在JAVA虚拟机内,能获取JAVA虚拟机内运行的JAVA应用、监听JAVA事件、Java元素的具体元素信息。[0050] 步骤S105,RPA应用接收所有Java元素的元素信息,基于所有Java元素的元素信息确定出目标Java元素,并向目标Java应用发送查询请求。[0051] 其中,查询请求用于指示目标Java应用查询目标Java元素的父节点元素信息。[0052] 在本申请的实施方式中,RPA应用接收到所有Java元素的元素信息后,可以利用匹配算法确定出目标Java元素,并向目标Java应用发送查询请求。[0053] 在本申请的一些具体实施方式中,上述基于所有Java元素的元素信息确定出目标Java元素,可以包括以下步骤:[0054] RPA应用遍历所有Java元素,获取所有Java元素中的矩形区域面积,将矩形区域面积最小的Java元素确定为目标Java元素。[0055] 步骤S106,目标Java应用基于查询请求查询目标Java元素的父节点元素信息,并根据目标Java元素的元素信息以及父节点元素信息,生成目标Java元素的元素标识。[0056] 其中,元素标识可以用于在反找元素步骤中确定目标元素的位置。[0057] 在本申请的实施方式中,目标Java应用接收到查询请求后,可以去查询目标Java元素的父节点元素信息。具体的,目标Java应用寻找目标Java元素的父节点,并记录该父节点的元素信息,再寻找目标Java元素的父节点的父节点,并记录该父节点的元素信息,循环此步骤,直至寻找到窗口节点,并记录窗口节点的元素信息。得到目标Java元素的父节点元素信息后,目标Java应用结合目标Java元素与各个父节点之间的层级关系,以及自身的元素信息以及父节点元素信息,得到元素标识。[0058] 步骤S107,RPA应用接收目标Java元素的元素标识。[0059] 在本申请的实施方式中,目标Java应用生成目标Java元素的元素标识后,可以通过通信连接向RPA应用返回目标Java元素的元素标识,至此RPA应用得到了目标Java元素的元素标识。[0060] 本申请实施例与现有技术相比的有益效果是:本申请实施例中,RPA应用与Java应用建立通信连接,获取鼠标位置,并向目标Java应用发送鼠标位置,根据目标Java应用返回的鼠标位置下的所有Java元素的元素信息,确定出目标元素,并获取目标Java元素的元素信息以及父节点元素信息,从而得到目标Java元素的元素标识。采用本申请实施例,可以在Linux操作系统下实现自动获取Java元素的元素标识。[0061] 在本申请的一些实施方式中,上述RPA应用与Java应用建立通信连接,具体可以包括步骤S201至步骤S206。[0062] 步骤S201,RPA应用加载BitWorkerBridge.dl,并对BitWorkerBridge.dll进行初始化,生成RPAID。[0063] 在本申请的实施方式中,RPA应用可以加载一个名为BitWorkerBridge.dll的动态链接库(DLL),并对其进行初始化。在初始化过程中,RPA应用会生成一个唯一的标识符,也即RPAID。具体的,初始化过程包括:创建线程锁;注册dbus总线;创建独立线程,来监听dbus消息。[0064] 步骤S202,RPA应用启动独立线程进行监听dbus消息,并广播第一异步消息。[0065] 其中,第一异步消息的内容包括RPAID。dbus是一种用于进程间通信的机制。[0066] 在本申请的实施方式中,RPA应用可以启动独立的线程来进行dbus消息的监听。RPA应用还可以广播一个异步消息,该异步消息的内容包括了前面生成的RPAID。具体的,RPA应用可以指定对象、接口以及信号名,设置信号内容(包括RPAID),发送信号。[0067] 步骤S203,所有Java应用接收到第一异步消息后,均向RPA应用返回第二异步消息。[0068] 其中,第二异步消息的内容包括每个Java应用对应的JavaID。[0069] 在本申请的实施方式中,当所有的Java应用接收到RPA应用发出的第一异步消息后,它们会向RPA应用返回一个第二异步消息。这个消息的内容包括了每个Java应用对应的JavaID。具体的,所有Java应用都可以循环读取消息,收到异步消息并处理异步消息。[0070] 步骤S204,RPA应用接收到第二异步消息后,创建与Java应用之间的共享内存,将RPAID与JavaID作为共享内存的标识符,并向JavaID对应的Java应用发送同步消息。[0071] 其中,同步消息的内容包括标识符。[0072] 在本申请的实施方式中,当RPA应用接收到第二异步消息后,它可以创建一个与Java应用之间的共享内存。这个共享内存的标识符是RPAID和JavaID。接着,RPA应用可以向每个Java应用发送一个同步消息,这个消息的内容包括了标识符。具体的,RPA应用可以指定对象、接口、信号名,设置信号内容,发送消息并等待回复。[0073] 可以理解的是,创建共享内存,可以在进程间进行消息通信,RPA应用和Java应用中的dll都共同访问此共享内存,这种方式通信速度快,且大大降低了在大规模数据处理过程中内存的消耗。具体的创建共享内存包括:创建一个提取码、创建共享空间、设置共享空间地址。[0074] 步骤S205,Java应用读取标识符,获取共享内存,并向共享内存中写入确定消息。[0075] 其中,确定消息用于确定Java应用与RPA应用通信成功,具体内容可以是OK。[0076] 在本申请的实施方式中,当Java应用接收到由RPA应用发送的同步消息后,它可以读取这个消息中的标识符,并据此获取共享内存。然后,Java应用可以向这个共享内存中写入一个确定消息。[0077] 步骤S206,RPA应用读取共享内存的确定消息,确定与Java应用成功建立通信连接。[0078] 在本申请的实施方式中,RPA应用可以读取共享内存中的确定消息。如果确定消息存在,则RPA应用可以确认与Java应用之间的通信连接已经成功建立。[0079] 本申请实施方式通过创建共享内存来建立RPA应用与Java应用之间的通信连接,二者通过共享内存进行通信,可以提高通信速度,且大大降低了在大规模数据处理过程中内存的消耗。[0080] 在本申请的一些具体实施方式中,上述方法还可以包括步骤S301至步骤S304。[0081] 步骤S301,RPA应用创建线程锁,并在向共享内存写入消息前给共享内存上线程锁。[0082] 其中,线程锁是一种同步机制,可以用于控制对共享资源的访问。[0083] 在本申请的实施方式中,RPA应用创建了一个线程锁。当RPA应用要向共享内存写入消息时,它会先给共享内存加上线程锁,以防止其他线程同时访问共享内存。[0084] 步骤S302,Java应用创建线程锁,并在读取共享内存内的消息前给共享内存上线程锁。[0085] 在本申请的实施方式中,同样地,Java应用也创建了一个线程锁,并在读取共享内存内的消息之前给共享内存加上线程锁。从而确保在读取共享内存时,不会受到其他线程的干扰。[0086] 步骤S303,Java应用在向共享内存写入消息后,将共享内存释放线程锁。[0087] 在本申请的实施方式中,当Java应用向共享内存写入消息后,它可以释放对共享内存的线程锁,以允许其他线程对共享内存进行访问。[0088] 步骤S304,RPA应用在读取共享内存内的消息后,将共享内存释放线程锁。[0089] 在本申请的实施方式中,当RPA应用从共享内存读取消息后,它也可以释放对共享内存的线程锁,以允许其他线程对共享内存进行访问。[0090] 在本申请的一些具体实施方式中,在上述RPA应用与Java应用建立通信连接之前,上述方法还可以包括步骤S401至步骤S403。[0091] 步骤S401,Java应用加载AcessBridge.jar,并通过AcessBridge.jar加载BitWorkerJavaBridge.dll。[0092] 其中,AcessBridge.jar可以包含一些用于与BitWorkerJavaBridge.dll交互的Java类或库。BitWorkerJavaBridge.dll是一个动态链接库文件,其内可以包含一些本地方法或资源。[0093] 在本申请的实施方式中,Java应用可以先加载AcessBridge.jar,再通过AcessBridge.jar加载BitWorkerJavaBridge.dll。[0094] 步骤S402,Java应用对BitWorkerJavaBridge.dll进行初始化,生成JavaID。[0095] 其中,JavaID可以用于标识Java应用在与当RPA应用进行交互时的身份。[0096] 在本申请的实施方式中,在加载了BitWorkerJavaBridge.dll之后,Java应用可以对其进行初始化,具体可以调用BitWorkerJavaBridge.dll中的一些方法或函数。初始化过程中,每个Java应用都可以生成一个JavaID。[0097] 步骤S403,Java应用广播JavaID,并启动独立线程来监听dbus消息。[0098] 在本申请的实施方式中,Java应用可以通过某种方式广播了其对应的JavaID,例如可以是在网络中广播或者是在本地系统中广播。从而可以让RPA应用知道这个JavaID的存在。同时,Java应用可以启动一个独立线程来监听dbus消息,以使其可以与使用dbus通信的RPA应用进行交互。[0099] 可以理解的是,Java应用广播JavaID,使得RPA应用收到JavaID后也可以回复上述第一异步消息,以确保即使RPA应用先启动,java应用后启动,也能通信成功。[0100] 本申请实施方式通过加载必要的库文件、生成并广播JavaID以及启动线程监听dbus消息,有助于建立Java应用与RPA应用之间的通信连接并实现后续的交互操作。[0101] 在Java自动化过程中,需要模拟用户对一些Java元素的操作,例如,模拟点击一个按钮、输入文本、读取数据等。而执行模拟操作之前,需要先确定对应的Java元素的位置,也即需要先反找元素。[0102] 有鉴于此,在本申请的一些实施方式中,在上述RPA应用接收目标Java元素的元素标识之后,上述方法还可以包括步骤S501至步骤S504。[0103] 步骤S501,RPA应用根据元素标识,获取窗口句柄,并向元素标识对应的Java应用发送窗口句柄。[0104] 步骤S502,Java应用接收窗口句柄后向RPA应用返回窗口信息。[0105] 步骤S503,RPA应用根据窗口信息获取子节点元素信息,并判断子节点元素信息对应的元素是否满足目标元素特征。[0106] 步骤S504,当查找到满足目标元素特征的Java元素,则RPA应用将满足目标元素特征的Java元素确定为目标元素。[0107] 其中,目标元素特征是目标元素所独有的特征,可以根据使用经验自行设置。[0108] 在本申请的实施方式中,RPA应用首先可以根据在步骤S107中得到的元素标识来获取对应的窗口句柄,也即获取窗口的唯一标识符,并将该窗口句柄发送给Java应用。Java应用接收窗口句柄后,可以根据该窗口句柄获取到对应的窗口信息,并向RPA应用返回该窗口信息。RPA应用接收到窗口信息后,可以根据这些窗口信息进一步获取到窗口下子节点的子节点元素信息,这些子节点元素信息中可以包括了一些与目标元素相关的属性或者位置信息。接着RPA应用可以判断子节点元素信息对应的元素是否满足目标元素特征,例如可以对元素的属性、位置、内容等进行比较和分析。当查找到满足目标元素特征的Java元素时,RPA应用可以将该Java元素确定为目标元素。[0109] 可以理解的是,RPA应用在判断子节点元素信息对应的元素是否满足目标元素特征时,若窗口节点的子节点不满足目标元素特征,则可以查找该子节点的子节点元素,继续判断子节点的子节点元素是否满足目标元素特征,循环此步骤,直至找到目标元素。[0110] 本申请实施方式通过RPA应用和Java应用相互配合,实现了在给定元素标识的情况下,反找到满足目标元素特征的Java元素的目标。[0111] 在本申请的一些实施方式中,上述RPA应用获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用,具体还可以包括步骤S601至步骤S604。[0112] 步骤S601,RPA应用获取鼠标位置以及鼠标位置下的窗口句柄,并向与RPA应用通信连接的所有Java应用发送询问消息。[0113] 其中,询问消息用于指示Java应用是否包含对应的窗口。[0114] 在本申请的实施方式中,RPA应用可以获取当前鼠标的位置信息,以及该鼠标位置下的窗口句柄,,即当前鼠标指向的窗口。然后,RPA应用可以向所有与其通信连接的Java应用发送询问消息,询问它们是否包含这个窗口句柄对应的窗口。[0115] 步骤S602,所有Java应用接收询问消息,并判断Java应用是否包含窗口句柄对应的窗口。[0116] 在本申请的实施方式中,所有Java应用接收询问消息后,这些Java应用会检查自己的窗口是否与该窗口句柄对应。[0117] 步骤S603,包含窗口的Java应用向RPA应用返回确认消息,不包含窗口的Java应用向RPA应用返回否认消息。[0118] 在本申请的实施方式中,如果某个Java应用找到了与窗口句柄对应的窗口,那么它会向RPA应用返回一个确认消息,表示这个窗口是它的。如果它没有找到对应的窗口,那么它会返回一个否认消息,表示这个窗口不是它的。具体的,确定消息可以是true,否定消息可以是false。[0119] 步骤S604,RPA应用基于确认消息以及否认消息判断鼠标位置对应的应用是否为Java应用。[0120] 在本申请的实施方式中,RPA应用可以接收到所有Java应用的反馈信息,然后根据这些信息判断鼠标当前位置的应用是否为Java应用。例如,如果所有的Java应用都返回了否认消息,那么RPA应用则可以判断鼠标当前位置的应用不是Java应用。如果有某个Java应用返回了确认消息,则可以确定该Java应用在鼠标当前位置之下。[0121] 在本申请的另一些实施方式中,上述RPA应用获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用,具体还可以包括以下步骤:[0122] RPA应用获取鼠标位置对应的应用的应用名称,并根据应用名称判断对应的应用是否为Java应用。[0123] 在本申请的实施方式中,RPA应用可以使用系统自带的API函数、第三方工具库、自定义脚本或插件等来获取鼠标位置对应的应用的应用名称。得到鼠标位置对应的应用的应用名称后,RPA应用可以判断该应用名称中是否包含java或者javaw。若包含,则可以判断对应的应用为Java应用;若不包含,则可以判断对应的应用不是Java应用。[0124] 图2示出了本申请实施例提供的一种元素的选取系统的结构示意图,上述元素的选取系统2可以配置于终端设备上,具体的,上述元素的选取系统2,可以包括RPA应用21以及Java应用22。[0125] RPA应用21可以用于与Java应用22建立通信连接;[0126] RPA应用21还可以用于获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用22;[0127] 当鼠标位置对应的应用为Java应用22时,RPA应用21还可以用于接收对应的目标Java应用22的JavaID,并将鼠标位置通过JavaID发送至目标Java应用22,目标Java应用22为鼠标位置对应的Java应用22;[0128] 目标Java应用22可以用于接收鼠标位置,获取鼠标位置下的所有Java元素的元素信息,并向RPA应用21返回所有Java元素的元素信息;[0129] RPA应用21还用于接收所有Java元素的元素信息,基于所有Java元素的元素信息确定出目标Java元素,并向目标Java应用22发送查询请求;[0130] 目标Java应用22还可以用于基于查询请求查询目标Java元素的父节点元素信息,并根据目标Java元素的元素信息以及父节点元素信息,生成目标Java元素的元素标识;[0131] RPA应用21还可以用于接收目标Java元素的元素标识。[0132] 本申请实施例与现有技术相比的有益效果是:本申请实施例中,RPA应用21与Java应用22建立通信连接,获取鼠标位置,并向目标Java应用22发送鼠标位置,根据目标Java应用22返回的鼠标位置下的所有Java元素的元素信息,确定出目标元素,并获取目标Java元素的元素信息以及父节点元素信息,从而得到目标Java元素的元素标识。采用本申请实施例,可以在Linux操作系统下实现自动获取Java元素的元素标识。[0133] 在本申请的一些实施方式中,RPA应用21与Java应用22建立通信连接,可以包括:RPA应用21加载BitWorkerBridge.dl,并对BitWorkerBridge.dll进行初始化,生成RPAID;[0134] RPA应用21启动独立线程进行监听dbus消息,并广播第一异步消息,第一异步消息的内容包括RPAID;所有Java应用22接收到第一异步消息后,均向RPA应用21返回第二异步消息,第二异步消息的内容包括每个Java应用22对应的JavaID;RPA应用21接收到第二异步消息后,创建与Java应用22之间的共享内存,将RPAID与JavaID作为共享内存的标识符,并向JavaID对应的Java应用22发送同步消息,同步消息的内容包括标识符;Java应用22读取标识符,获取共享内存,并向共享内存中写入确定消息;RPA应用21读取共享内存的确定消息,确定与Java应用22成功建立通信连接。[0135] 在本申请的一些实施方式中,系统还可以包括:RPA应用21创建线程锁,并在向共享内存写入消息前给共享内存上线程锁;Java应用22创建线程锁,并在读取共享内存内的消息前给共享内存上线程锁;Java应用22在向共享内存写入消息后,将共享内存释放线程锁;RPA应用21在读取共享内存内的消息后,将共享内存释放线程锁。[0136] 在本申请的一些实施方式中,在上述RPA应用21与Java应用22建立通信连接之前,系统还可以包括:Java应用22加载AcessBridge.jar,并通过AcessBridge.jar加载BitWorkerJavaBridge.dll;Java应用22对BitWorkerJavaBridge.dll进行初始化,生成JavaID;Java应用22广播JavaID,并启动独立线程来监听dbus消息。[0137] 在本申请的一些实施方式中,在上述RPA应用21接收目标Java元素的元素标识之后,系统还可以包括:RPA应用21根据元素标识,获取窗口句柄,并向元素标识对应的Java应用22发送窗口句柄;Java应用22接收窗口句柄后向RPA应用21返回窗口信息;RPA应用21根据窗口信息获取子节点元素信息,并判断子节点元素信息对应的元素是否满足目标元素特征;当查找到满足目标元素特征的Java元素,则RPA应用21将满足目标元素特征的Java元素确定为目标元素。[0138] 在本申请的一些实施方式中,上述RPA应用21获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用22,可以包括:RPA应用21获取鼠标位置以及鼠标位置下的窗口句柄,并向与RPA应用21通信连接的所有Java应用22发送询问消息;所有Java应用22接收询问消息,并判断Java应用22是否包含窗口句柄对应的窗口;包含窗口的Java应用22向RPA应用21返回确认消息,不包含窗口的Java应用22向RPA应用21返回否认消息;RPA应用21基于确认消息以及否认消息判断鼠标位置对应的应用是否为Java应用22。[0139] 在本申请的一些实施方式中,上述RPA应用21获取鼠标位置,并判断鼠标位置对应的应用是否为Java应用22,还可以包括:RPA应用21获取鼠标位置对应的应用的应用名称,并根据应用名称判断对应的应用是否为Java应用22。[0140] 如图3所示,为本申请实施例提供的一种终端设备的示意图。该终端设备3可以包括:处理器31、存储器32以及存储在所述存储器32中并可在所述处理器31上运行的计算机程序33,例如元素的选取程序。所述处理器31执行所述计算机程序33时实现上述各个元素的选取方法实施例中的步骤,例如图1所示的步骤S101至步骤S107。[0141] 所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器32中,并由所述处理器31执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述终端设备中的执行过程。[0142] 所述终端设备可包括,但不仅限于,处理器31、存储器32。本领域技术人员可以理解,图3仅仅是终端设备的示例,并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。[0143] 所称处理器31可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field‑ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。[0144] 所述存储器32可以是所述终端设备的内部存储单元,例如终端设备的硬盘或内存。所述存储器32也可以是所述终端设备的外部存储设备,例如所述终端设备上配备的插接式硬盘,智能存储卡(SmartMediaCard,SMC),安全数字(SecureDigital,SD)卡,闪存卡(FlashCard)等。进一步地,所述存储器32还可以既包括所述终端设备的内部存储单元也包括外部存储设备。所述存储器32用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器32还可以用于暂时地存储已经输出或者将要输出的数据。[0145] 需要说明的是,为描述的方便和简洁,上述终端设备的结构还可以参考方法实施例中对结构的具体描述,在此不再赘述。[0146] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0147] 本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述元素的选取方法中的步骤。[0148] 本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时可实现上述元素的选取方法中的步骤。[0149] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。[0150] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对各个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。[0151] 在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。[0152] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0153] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0154] 所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read‑OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。[0155] 以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

专利地区:广东

专利申请日期:2023-12-04

专利公开日期:2024-09-03

专利公告号:CN117667285B


以上信息来自国家知识产权局,如信息有误请联系我方更正!
电话咨询
读内容
搜本页
回顶部