玩了三天Uipath Studio, 記錄一下自己的體驗。
最初目標:用Uipath automate通過Dataloader往Salesforce導入數據的過程。
背景需求:通過Dataloader往Salesforce導入數據的流程步驟清晰明確,工具本身沒有動態變化的元素,感覺比較好抓取UI元素進行automate. 導入少量數據文件時,手工操作其實並不麻煩耗時,但是做成自動化之后,對於導入大量數據文件的情況可節省重復繁瑣的人力。而且Dataloader一旦關閉,再次啟動后需要重新輸入賬號信息進行登錄,對於頻繁從一個環境導出數據再到另一個環境導入數據的情況,登錄非常麻煩。自動化之后,自動獲取Host URL和賬號信息,切換環境快速。初次體驗實現的是通過Dataloader往Salesforce導入數據的過程,后續可根據需要擴展Update/Upsert/Delete/Export功能。
過程:一開始使用Uipath時沒有頭緒,Uipath里面有很多的組件(Activity),每個組件完成特定的原子功能,通過拉取組件按順序排列形成workflow來實現操作過程。一開始不清楚每個組件的原子功能顆粒度是多大,每一個頁面操作對應拉取什么組件來實現。想起Uipath具有錄制回放功能,所以利用錄制功能將需要實現的操作過程錄制了一遍,保存,回放,回放一遍基本無錯誤。基於錄制,查看它是如何實現該過程的,對於sequence, process的結構,基本的activity, 如Click, Type就基本清楚了。接下來就是在錄制的基礎上進行修改,使流程能更靈活地滿足需求。想法如下:
1. 優化Dataloader啟動過程。錄制是拿desktop作為informative screenshot, 點擊Dataloader的圖標啟動的。desktop圖標是很容易變化的,一旦變化,Uipath就無法找到Dataloader的圖標啟動,需要優化。
2. 登錄Dataloader的username, password, host URL從外部excel獲取。
3. Loop Insert的過程,每一次Insert所需要指定的Object, 待導入文件路徑從外部excel獲取。
其中,外部excel configuration文件有2個sheets, 一為login信息,一為mapping of object and import file.
由此待解決的知識點有:
1. Uipath怎么讀取excel文件,怎么操作excel row/column/cell. 找出具體的activity.
2. Uipath怎么創建參數,怎么傳遞參數。找出具體的activity.
3. Uipath循環流程怎么實現。找出具體的activity.
4. 另外可能會遇到怎么定位頁面元素,怎么debug等問題。
對Uipath的使用:
1. 實操過程中所用到的Activities:
為了不從desktop雙擊啟動application, 目前找到的Uipath activity有兩個:
Open Application & Start Process
FileName - The full file path where you can find the executable file of the application you want to open.
Arguments - The parameters that can be passed to the application at startup.
因為Dataloader是個.bat文件,它啟動時還依賴同路徑下的其他文件,用上面兩個activity不起作用。嘗試過用run bat script, 但是報錯;想過一步一步打開command prompt, 再輸入command執行,或是打開文件路徑,再雙擊啟動;覺得都有點麻煩,不知道還有什么更方便的辦法,目前還是從desktop double click, 將desktop full screenshot替換成了僅shortcut.
Indicate On Screen
SelectScreenRegion - When this check box is selected, you can select a region on the screen. 直接點擊窗口時,Uipath會自動截取部分或全部窗口;使用SelectScreenRegion來盡量去除無關因素的影響只框定在不變的區域。
Click ('list item'/'Button')
ClickType - 錄制時不管實際是單擊還是雙擊,默認選擇的是CLICK_SINGLE,需要根據實際情況修改。
Type Into
Text - 需要輸入的值,該輸入框后面帶有一個小'+'號,可選擇在輸入值之后按某special key, 如enter.
ClickBeforeTyping - 將鼠標focus到輸入框。
DelayBetweenKeys - 輸入值時字符之間的延遲時間,以毫秒算。
EmptyField - 輸入值之前將輸入框內先清空。
Uipath在Dataloader登錄界面輸入用戶名時發生了一個奇怪的現象,用戶名為email格式的,如'xiao.huang.hun@test.com', 從excel讀取出來的每次都是正確的,但是輸入到用戶名輸入框時有的時候會丟失一個點變成如'xiaohuang.hun@test.com', 這個問題隨機發生,每次發生時都是丟失了同一個位置的點,沒有搞明白。直到查詢另一個問題時無意中看到有人說可嘗試將'DelayBetweenKeys'設大一點,一試有效,目前沒再出現過問題。但根本原因是什么還沒弄懂,求解釋。
Excel Application Scope
WorkbookPath - 指定待操作的excel文件的路徑。
跟excel有關的操作都放置在這個container之內。關於對excel的操作,查看這篇文章的例子可有個基本了解:https://docs.uipath.com/activities/docs/read-from-excel-files
Read Cell
讀取excel單元格。
Cell - 單元格,如'A1'.
Read Range
讀取excel區域。詳情參見:https://docs.uipath.com/activities/docs/read-range
Range - 區域,如'A1:C3'. 不指定時填入"", 表示讀取指定sheet里面全部區域。
輸出值僅支持DataTable類型。參見:https://docs.uipath.com/studio/docs/data-table-variables
For Each Row
循環語句,對excel每一行進行處理。如'ForEach row in dataTable'. 使用例子可參考:https://docs.uipath.com/activities/docs/remove-data-row-column
Get Row Item
獲取excel一行中的某一列的值,即某個單位格的值。
ColumnIndex - 列索引
ColumnName - 列名
Row - 所在行
Assign
賦值操作。
Select Item ('ListBox')
勾選'Show all Salesforce objects', 將listbox的滾動條下拉到底,這樣使得listbox里面所有的items都加載出來,利用Uipath錄制一遍,可自動調用'Select Item' activity並生成所有items的下拉列表,這樣就可以直接通過輸入選項名來選定該item.
Click Image 點擊圖片
Click Text
選中Salesforce object並選擇待導入的CSV文件之后,Dataloader上有一個'Next'按鈕會自動enable起來繼續下一步的操作。錄制時選擇文件的操作是點擊截圖所示的'list item', 為實現將文件變成參數傳入以選擇任意文件,嘗試了如下方法,這些方法對其他軟件可能起作用,但是對Dataloader不起作用。
方法1. 直接在提示選擇文件的輸入框內輸入文件路徑。這樣可以免去查找的步驟,變成了一個Type Into activity, 簡單方便。
方法2. 點擊'Browse...'打開文件搜索,進入文件夾之后,在文件名輸入框中輸入文件名,再點擊打開按鈕或輸入文件名+"[k(enter)]"。這種方式也避免了直接點擊文件。
觀察發現Dataloader一定要滿足選擇Salesforce object,並點擊'Browse...'去點擊選擇一個文件,'Next'按鈕才會enable起來。最后用的方法是:
點擊'Browse...'打開文件搜索,進入文件夾之后,添加一個'Click Text' activity, 'Indicate on screen'選取的是文件夾內部區域,'Input>Text'為文件名,'Input>ClickType'選擇'CLICK_DOUBLE'. 這樣可根據輸入的文件名去雙擊文件夾內部區域等於所給文件名的部分。
Check ('Button')
選中/不選中勾選框可用Click, 也可用Check. Dataloader上有一個方形勾選框'Show all Salesforce objects'用Click可選中勾選框,可是選中后不能起到顯示所有列表選項的作用,但用Check可以。
Message Box
可用於查看在跑的過程中參數的值是什么,用於debug.
Send Hotkey 發送快捷鍵
2. Uipath以“框框”(container)來界定作用域。常見的如

'Attach Window'框表示操作所在的窗口;'Do'框表示窗口的操作;'Click'框表示具體的一個操作。
想對哪個窗口做操作,拉取activity時需要拉到對應窗口的container內部去。只對該窗口起作用的參數也要選中該窗口創建。
3. 選中container->右鍵->Enable/Disable Activity (Ctrl + D), 可對操作進行取消注釋/注釋。
4. 拼接字符串可以直接將字符/參數相'+', 如fullPath = filePath + fileName + “.csv”
5. 錄制是個好功能,任何時候都可以嘗試通過錄制功能去記錄一個手動操作,根據自動生成的activity理解Uipath的行為,再修改activity以滿足實際的需求,將其copy/paste到主流程里面去。
6. container層數太多導致不方便區分作用域時,可雙擊某個container, 進入到僅顯示該container及其內部的頁面。
這次Uipath體驗涉及到的僅九牛一毛,還有更多的功能等待探索。
