一种Java应用程序自动化系统的制作方法

文档序号:26050083发布日期:2021-07-27 15:24阅读:266来源:国知局
本发明涉及一种java应用程序自动化系统,具体为远程应用自动化
技术领域
:。
背景技术
::rpa,全称为roboticprocessautomation,即机器人流程自动化,它是替代人工的一种软件自动化工作方式,用于解放人力于重复冗杂和有规则的工作流中。其中,自动化技术是构成rpa产品的基石,rpa在落地的过程中会遇到各种各样的自动化场景,其中一大类就是基于javaawt/swingui框架的应用,这类应用在金融,通信等领域受到广泛应用,故而催生了大量的自动化需求。在windows平台上,桌面应用的自动化技术往往是基于accessibility,即应用程序的可访问性来实现的,可访问性功能的初衷是为了服务残障用户,结合屏幕阅读器或者其他辅助技术,让他们使用图形化的软件称为了可能。windows平台上提供了两种推荐的可访问性技术,msaa(microsoftactiveaccessibility)和uia(uiautomation)。大部分桌面应用都通过这两种可访问性技术公开了丰富的ui元素信息,但javaawt/swingui元素的可访问性并没有通过这两种技术提供。这导致,基于这两种可访问性实现的rpa自动化技术,在此类应用程序上只能获取应用最外层窗口的ui元素信息,而内部的javaui控件信息则无法获取。对此,awt和swing提供了另外一种可访问性实现javaaccessibilitybridge,以下简称jab。启用jab需要预先配置并且重新启动应用程序之后才能使配置生效,不能做到开箱即用。另外,由于jab缺少官方维护,几乎没有迭代更新,在一些特殊的应用上,例如金蝶eas上很多ui元素的信息不能访问,同时jab对于用户自定义的ui元素并没有可访问性支持。以上这些问题,导致jab在rpa场景下不能完全适用,亟待改良和扩展。技术实现要素:本发明的目的在于提供一种java应用程序自动化系统,以解决上述
背景技术
:中提出的jab缺少官方维护,几乎没有迭代更新,在一些特殊的应用上,例如金蝶eas上很多ui元素的信息不能访问,同时jab对于用户自定义的ui元素并没有可访问性支持导致jab在rpa场景下不能完全适用等问题。为实现上述目的,发明提供如下技术方案:一种java应用程序自动化系统包含bridgeintruder模块、bridgejar模块、bridgeserver模块和bridgeclient模块,其中bridgeintruder模块是java自动化组件注入模块;bridgejar模块是自动化模块java部分实现,负责与javaui元素直接交互;bridgeserver模块是自动化桥接server端,负责接收客户端的调用,同时调用实际的java方法;bridgeclient是自动化桥接client端,通过客户端可以发起对java控件可访问性方法的调用。java应用程序自动化系统通过attachapi实现组件热加载,以及对自定义控件可访问性的实现。优选的,所述的attachapi实现组件热加载方法为:新增了attachapi,该api允许在jvm的运行过程中动态的设置和加载代理类,当rpa应用在录制和回放应用时,会根据窗口的classname自动判断是否为javaawt/swing应用,并调用intruder注入bridgejar组件,bridgeintruder为java应用程序,其中接收rpa软件传入的进程id,使用attachapi连接上jvm,然后使用loadagent函数加载代理类所在的jar包,即bridgejar组件,由于bridgeintruder为java应用程序,所以在调用之前需要由rpa应用程序获取到执行的java环境;对于通过loadagent加载的自动化模块,也需要符合agent的规范,manifest.mf文件中注明,当前jar的agentclass,同时,agentclass需要实现名为agentmain的入口函数,jvm会在模块加载完成之后自动调用该入口函数,从而启动bridgeserver实现与bridgeclient之间的通信。优选的,其中对自定义控件可访问性的实现方法为:javaui元素的可访问性是通过对应的accessiblecontrol实现的,当获取jbutton控件的ui信息时,bridgejar会首先判断当前控件是否实现了accessible接口,若控件没有实现可访问性接口则认为其不具备可访问性,因此rpa应用也就不会获取到ui元素的信息;否则,会调用accessible接口里的getaccessiblecontext方法,获取当前ui元素的可访问上下文对象,也就是accessiblecontrol对象,至此已经可以获取到元素的ui信息,包括位置,文本,状态,类型。优选的,为了实现通用的accessiblecontrol从而使其对其他自定义控件具有普适性,创建了一个自定义的可访问性控件实现类encooaccessiblecomponent,该类继承自可访问性上下文accessiblecontext基类,同时实现了accessible和accessiblecomponent接口,并接受当前javaui控件对象作为构造参数,从而在需要访问ui元素信息时,反射调用控件对应的属性和方法获取到实际的控件信息,这样就使原本没有可访问性的javaui元素对外包括暴露出可访问性。优选的,在自定义可访问性控件的实现中,还需要建立自定义控件实例与对应可访问性控件实现之间的映射关系,当bridgejar加载到jvm中时,通过反射的方式在全局变量中,注册控件classname与具体实现类的映射关系。优选的,在自定义可访问性控件的实现中,除了需要继encooaccessiblecomponent以获得ui元素基本信息的实现,当控件本身存在特定的行为或方法时,还需要实现对应的accessibleinterface。优选的,accessibleselection中提供了与可选性相关的接口,包含已选中得单元格数量,以及选中单元格的方法,accessibleextendedtable中则实现了获取表格行列和单元格内容等方法,从而支持了表格的结构化数据获取,至此本身无可访问性的自定义表格ui元素已实现了对外暴露ui信息,即可访问性的支持。与现有技术相比,本发明的有益效果是:本发明通过attachapi实现的组件热加载,以及对自定义控件可访问性的实现,这里面包括对国内常见oa,erp上自定义控件的支持,如用友nc,金蝶eas等。对比市场上已有的rpa产品,热加载技术能使在无需配置和重启应用的情况下,自动化java应用,节省rpa开发部署过程中的大量时间,提升产品的灵活和易用性。自定义控件的支持,让rpa产品能自动化几乎所有javaawt/swing应用上的ui元素,同时遇到新的自定义控件也可快速实现对其的支持。附图说明图1为本发明的java应用程序自动化系统连接结构示意图。具体实施方式下面将结合发明实施例中的附图,对发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是发明一部分实施例,而不是全部的实施例。基于发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于发明保护的范围。请参阅图1,本实施例提供一种技术方案:一种java应用程序自动化系统包含bridgeintruder模块、bridgejar模块、bridgeserver模块和bridgeclient模块,其中bridgeintruder模块是java自动化组件注入模块;bridgejar模块是自动化模块java部分实现,负责与javaui元素直接交互;bridgeserver模块是自动化桥接server端,负责接收客户端的调用,同时调用实际的java方法;bridgeclient是自动化桥接client端,通过客户端可以发起对java控件可访问性方法的调用。java应用程序自动化系统通过attachapi实现组件热加载,以及对自定义控件可访问性的实现。其中,所述的attachapi实现的组件热加载方法为:新增了attachapi,该api允许在jvm的运行过程中动态的设置和加载代理类,当rpa应用在录制和回放应用时,会根据窗口的classname自动判断是否为javaawt/swing应用,并调用intruder注入bridgejar组件,bridgeintruder为java应用程序,其中接收rpa软件传入的进程id,使用attachapi连接上jvm,然后使用loadagent函数加载代理类所在的jar包,即bridgejar组件,由于bridgeintruder为java应用程序,所以在调用之前需要由rpa应用程序获取到执行的java环境。同时还需要区分java环境,32位的jvm只能同样由32位的bridgeintruder进程注入,64位同理;其中,对于通过loadagent加载的自动化模块,其也需要符合agent的规范,manifest.mf文件中需要注明,当前jar的agentclass,同时,agentclass需要实现名为agentmain的入口函数,jvm会在模块加载完成之后自动调用该入口函数,从而启动bridgeserver实现与bridgeclient之间的通信。其中对自定义控件可访问性的实现方法为:javaui元素的可访问性是通过对应的accessiblecontrol实现的。例如,jbutton中就实现了对应的可访问性控件accessiblejbutton。当获取jbutton控件的ui信息时,bridgejar会首先判断当前控件是否实现了accessible接口,若控件没有实现可访问性接口则认为其不具备可访问性,因此rpa应用也就不会获取到ui元素的信息。否则,会调用accessible接口里的getaccessiblecontext方法,获取当前ui元素的可访问上下文对象,也就是上文提到的accessiblecontrol对象,至此已经可以获取到元素的ui信息,包括位置,文本,状态,类型等等。在实际自动化场景中,会遇到大量的自定义控件,这些自定义控件可能并不是从具有可访问性实现的基础控件派生而来,所以使用上面的方法无法获取到ui元素信息,此时这个自定义控件对外不呈现可访问性,rpa也就无法自动化这些控件。为了解决这一问题,因此需要替代自定义控件本身,实现可访问性接口。为了实现通用的accessiblecontrol从而使其对其他自定义控件具有普适性,创建了一个自定义的可访问性控件实现类encooaccessiblecomponent,该类继承自可访问性上下文accessiblecontext基类,同时实现了accessible和accessiblecomponent接口,并接受当前javaui控件对象作为构造参数,从而在需要访问ui元素信息时,反射调用控件对应的属性和方法获取到实际的控件信息,这样就使原本没有可访问性的javaui元素对外包括暴露出可访问性。在具体实现中,还需要建立自定义控件实例与对应可访问性控件实现之间的映射关系。当bridgejar加载到jvm中时,通过反射的方式在全局变量中,注册控件classname与具体实现类的映射关系。例如,金蝶eas系统中,表格控件为自定义控件,无可访问性。对表格控件,基encooaccessiblecomponent实现了encooaccessiblekdreporttable,并且注册了com.kingdee.bos.ctrl.kds.core.table与其的对应关系,当bridgejar访问表格控件时,根据其类名找到注册的可访问性控件实现,encooaccessiblekdreporttable,使用它向rpa软件提供ui元素信息。在自定义可访问性控件的实现中,除了需要继承encooaccessiblecomponent以获得ui元素基本信息的实现,当控件本身存在特定的行为或方法时,还需要实现对应的accessibleinterface。以金蝶eas上的表格为例,表格控件支持用户选择其中的单元格或行列,同时表格还可以支持用户根据行列号访问单元格数据,故encooaccessiblekdreporttable还同时实现了accessibleselection和accessibleextendedtable接口。accessibleselection中提供了与可选性相关的接口,包含已选中得单元格数量,以及选中单元格的方法等。accessibleextendedtable中则实现了获取表格行列和单元格内容等方法,从而支持了表格的结构化数据获取,至此本身无可访问性的自定义表格ui元素已实现了对外暴露ui信息,即可访问性的支持。本实施例中字母缩写表如下表所示本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。需要说明的是,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合,本说明书系统实施例,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元提示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1