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

相關文章
相關標籤/搜索