UiPath是如何定位元素的

最近对RPA(机械化流程自动化)概念颇感兴趣,因此对RPA软件UiPath作了一番学习研究。
RPA能实现不一样软件窗口的自动化操做,那让我首先感到好奇的就是它是如何准确的表示一个窗口以及每一个元素的。
下面是个人学习记录。
1.Selector.
UiPath中表示元素定位的叫作Selector选择器,而且提供了一个相似网页浏览器调试器中选取元素一样所见即所得方式的UiExplorer,Selector实际上就是一些XML标签,从上到下、由前到后表示所定位元素的结构。标签内的属性用于区分元素特征。通常表现形式以下:浏览器

#中文新打开的记事本
<wnd app='notepad.exe' cls='Notepad' title='无标题 - 记事本' />
<wnd ctrlid='137' />

我的总结来看,<wnd>标签表示窗体和控件元素,惟一肯定一个程序窗体一般只须要app、cls、title三个属性,具体到控件经过ctrlid属性来区分。
通常的操做方式是,打开程序界面,用UiExplorer的Indicate Element点击程序,Selector Editor框内会显示选择器的详细信息,下方会有用于实际自动化操做的选择器XML表示方式。Property Explorer面板会显示该窗体或元素全部的属性信息。
这里还有一个问题是UiPath如何区分同一个程序的多个运行实例,若是你打开了多个记事本它怎么知道你要操做的是哪个?单凭app、cls、title说不够也能够说够也行。为何会这么说?首先从RPA的背后原理来讲,可以操做调用软件的图形界面其实是操做每一个窗体以及当中的每一个控件的句柄(Handle),以Open Application Activity打开记事本为例,每次打开的运行时窗体Handle值都是不同的。下面两张图是两次运行时调试看到的Handle值,Notepad变量是保存打开后的程序,以供后面调用,类型是Window。
图片描述
图片描述
从运行机制上来看,app、cls、title、Handle足够准肯定位某一具体运行的窗体并且是必须的,这是前面说不够的缘由。句柄能够理解为操做系统为窗体分配的虚拟内存地址,为每个在操做系统上运行的软件赋予的一个身份。固然句柄也不只仅是一个数值,它在Windows里面是一个有多个属性的结构体;句柄机制也不只仅是在窗体程序上,操做系统内部不少运行资源都会用到句柄。在这里咱们相对的只须要了解RPA相关的知识,这样理解句柄已经足够了。进一步说,每一个窗体都有一个惟一的句柄标识以后,ctrlid能够理解每一个控件基于所属窗体之上都有一个惟一的句柄值。
由于句柄的存在,因此虽然咱们从Property Explorer能看到窗体有不少其余属性,好比进程相关的pid,但都不适合用来区分进行RPA相关的操做。而这些属性与app、cls、title最大的区别在于它们都是由操做系统来管理的,做为应用层用户的咱们不只不便对它们进行管理也不须要对它们进行过多的关注。
咱们来看看在作RPAd的时候,咱们是在想些什么?在作RPA流程设计的时候,你在想打开哪一个应用(app)要作什么;我标出它的标题(title)吧,这样我本身好区分;若是程序复杂一点,有个分类(cls)属性再帮我作一下甄别更好;具体到操做哪一个控件看看ctrlid吧。接下来就是按照流程设计把一个个应用操做链接起来就是一个完整的RPA自动化操做了。你看,只须要关注咱们所可以看到的属性已经足够。app

相关文章
相关标签/搜索