UiPath Level 1-Lesson 12. Debugging & Exception


學習大綱

  • 如何使用調試功能
  • 如何使用Find Element和Element Exists與應用程序同步
  • 了解TryCatch活動的工作原理和使用方法

 

1. UiPath的調試工具

1) 容易被忽視的一點,也是在調試程序時非常有用的一點是,為你的Workflow和活動命名。

原因是在錯誤提示中,UiPath會使用Workflow和活動的名稱來告訴你哪里出了問題。

 

2) Start Debug工具

進入Execute菜單並點擊Start Debug按鈕,程序會在Debug模式中運行。它有以下特征:

  • 運行時,正在執行的活動會高亮標示出來,以方便查看。這種方法對於解決Input和Output的問題尤其有幫助。

  

  • 在Execute菜單的Options中選上Highlight Elements,運行時,活動所作用的元素也會高亮顯示出來。

  

  

  • Property Inspector:實時顯示已聲明的變量的當前值,適合用來解決一些程序邏輯問題。

  

  • Ouput面板:顯示正在發生的活動情況,以及Write Lines活動Log Messages活動的信息。

  

  • Slow Step:點擊按鈕放慢程序的執行速度,再次點擊恢復原速。在程序運行過程中也可使用或取消使用。
  • Toggle Breakpoint:為某個活動添加斷點。Start Debug后程序將在斷點處停止,以便查看當前的運行情況、變量的值、Output面板的信息等。
    • 下一步,你可以點擊Continue Debug繼續運行程序。
    • 也可以點擊Step Over來一步一步的執行接下里的活動。

    


 

2. 調試Input活動

Input類型的活動最容易出現的問題是作用的元素未找到,或找到錯誤的元素。

 

1) 檢查交互的窗口是否可見。

實例:UiPath交互的應用程序窗口被其他窗口遮擋,導致程序無法運行。

解決方案:手動關掉或最小化遮擋應用程序的窗口。但是 如果你的情況不允許使用這種方法,你可以嘗試更改活動的屬性。在Input Method的課程中(Click活動,Type活動等),活動的SendWindowsMessages和SimulateClick選項都是默認不勾選的。如此,活動會模擬人操作鍵盤和鼠標,當應用程序的窗口在最上方時,這種方法總是有效。我們可以嘗試勾選SendWindowsMessages或SimulateClick選項,來探索它們是否可以幫助我們解決問題,比如讓程序在后台運行。對於該實例,只需要為Click活動勾選SimulateClick就可以完美解決遮擋問題。

  • Tips:可以同時選中多個活動來編輯它們的共有屬性。

2) 更改Input的方法(比如使用其他活動)。

3) 檢查Selector。

學習Selector的課程了解其原理,再進行調試。但可以嘗試兩個能迅速解決Selector問題的方法:

  • 重新在界面上選取Selector來刷新它。

  

  • 打開Selector Editor,選擇右上角的Attach to Live Element。這可以解決Selector過於具體的問題。

 

3. 調試時間和同步問題

比如在某個網頁或者應用程序里,UiPath嘗試與某個元素進行交互,但該元素還未加載就緒。

實例:在某個網頁點擊登陸按鈕,當登陸按鈕彈出時,輸入用戶名和密碼(參考第8課)。此處我們將輸入用戶名的Type Into活動Timeout參數設置為0,人為制造一個Error並解決它。

  • 所有的Click和Type活動都有一個Timeout參數,該參數設置UiPath等待某元素出現的最長時間,超出時間仍未找到元素,UiPath就會彈出錯誤提示。該參數的默認值是30秒(以毫秒為單位,1毫秒=1/1000秒)。

  

解決方案:有三。

  • Element/Image Exists活動

Element/Image Exists活動不會影響Workflow的運行,只是返回一個布爾值(True/False),默認等待時間是3秒鍾(3000毫秒)。

可以在其后添加If-Else活動或者Do While循環來進行下一步操作。

  • Find Element/Image活動

與前者不同,Find Element/Image活動會使Workflow停止,直到某個元素/圖片出現,默認等待時間是30秒鍾。

  • Wait Element/Image Vanish活動

Wait Element/Image Vanish活動會使Workflow停止,直到某個元素/圖片消失。


 

4. 使用Try Catch活動

我們經常需要讓程序在發現錯誤時做出一系列的操作,有時甚至需要讓它在遇到特定的錯誤時繼續運行下去,而不是跳出錯誤信息並中止運行。Try Catch活動就是為了實現這些目的而設計的。

1) Try Catch活動

Try Catch活動由三個部分組成,Try,Catches和Finally,其中Finally是可選的。

Try:放入可能出錯的活動或流程。

Catches:選擇錯誤類型,並放入發生該類錯誤后需要執行的操作。可添加多個Catch來捕獲不同類型的錯誤或異常。

  • 最常用的類型是System.Exception,它可以捕獲所有種類的錯誤。

  

  • 判斷錯誤類型的方法是,看錯誤彈窗中的Exception Type信息。

  

Finally:運行完Try和Catches之后的操作,可選。

 

2) 實例

沿用本課第三節的例子,在某網站登陸界面錄入登陸信息,將所有活動都放入Try容器中,人為制造等待時間的錯誤。

實例1:不中止程序,但在發生錯誤時顯示錯誤信息。

  • 添加一個Catch容器,選擇System.Exception。
  • 此處使用Message Box活動會中止程序,因此不能用;使用Write Line活動會在Output面板中輸出一條信息而不會中止程序,我們可以使用它;使用Log Message活動不但可以在Output面板里顯示信息,還可以將信息寫入log文件中。當你要調試的程序是在無人看管的情況下運行時,使用Log Message活動進行調試無疑更加有效。

  

  • 如果你想在捕獲錯誤時中止程序,並顯示錯誤信息的提示框,可以在Log Message活動后面再添加一個Rethrow活動

實例2:你發現問題出在瀏覽器上,只要重新啟動瀏覽器就能解決問題。

  • 清空Catches容器,添加一個Open Browser活動並填入網站地址。
  • 在Open Browser容器中添加一個Log Message活動,輸入Recovering from Browser (從瀏覽器恢復),使用Log Message活動來記錄發生的情況是極好的。
  • 將Try容器里的Click和Type活動復制到新的Open Brower的容器中,即在發生錯誤時,打開新的瀏覽器再次進行之前的操作。

 

實例2-拓展:我們可以發現在Try容器和Catches的Open Browser容器中的活動都是相同的。如何簡化整個Workflow?

思路:使用Invoke Workflow File活動

  • 在Try容器的上方右擊,選擇Extract as Workflow,在彈出的窗口中為這個Workflow命名 (SapLogin)。

  •  確認后,會自動打開提取出的Workflow,該Workflow保存在當前項目的文件夾里。Try容器中的所有活動自動替換為Invoke Workflow File活動。

   

  • 用Invoke Workflow File活動替換Catches容器里的活動。這樣就簡化了整個Workflow,使整個流程更加清晰,一眼可見。


 

5. 練習1

1) 要求:比較Excel文件每一行的Cash In和Cash Out的不同,並寫入第三列中。

  • 如果Cash In或者Cash Out不是一個數字,則在第三列寫入Cash In Wrong或Cash Out Wrong;
  • 盡量不要使用If活動,依靠錯誤處理的方法來達到目的,比如Try Catch活動

2) 數據源

3) 思路

  • 因為整個流程是在Excel文件里進行的,因此先添加一個Excel Application Scope活動
  • 在Excel Application Scope容器中添加Read Range活動來讀取Excel上的數據並得到一個DataTable,記得勾選Add Headers選項。
  • 在Read Range活動之后添加一個For Each Row活動,在剛得到的DataTable中進行循環。
  • 創建兩個Int32型變量cashIn和cashOut,創建一個GenericValue型變量result。
  • 在For Each Row的主體里添加第一個Try Catch活動,在Try的部分里添加一個Assign活動,使cashIn=cint(row("Cash In"))。在Catch的部分選擇System.Exception並添加Assign活動,使result=“Cash In Wrong”。
    • cint()把單元格里的值從GenericValue型轉換為數字型。如果單元格的值不是數字,則會報錯。
  • 回到第一個Try Catch活動的Try部分,在Assign活動之后再添加一個Try Catch活動(嵌套在第一個里面)。
  • 在第二個Try Catch活動的Try部分添加兩個Assign活動,使cashOut=cint(row("Cash out")),result=cashIn-cashOut。在Catch的部分選擇System.Exception並添加Assign活動,使result=“Cash Out Wrong”。
  • 在第一個Try Catch活動的Finally部分添加一個Assign活動,使row("Difference")=result.ToString。
    • 不論執行了Try部分還是Catch部分,UiPath都會執行Finally部分的活動。
  • 最后,在For Each Row活動之后添加一個Write Range活動,將最終的DataTable寫入Excel文件中。

 

6. 練習2

1) 要求:現有一個Correct Errors.Xaml,它會把filesArray變量中提到的文本文件(.txt)的內容合並到一個單獨的consolidate.txt文本文件里。並且如果讀取文件的操作未能成功執行(因為Read Text File活動出現錯誤),則不把內容添加到合並的文本文件中。這個Workflow在存在幾處錯誤,在保持原有結構的前提下,盡量通過最少的修改來修復程序和邏輯。

2) 思路

  • Bug1:執行Assign活動index=index+1時報錯。原因是index變量沒有初始化。對於GenericValue型變量,UiPath無法判斷你需要一個數字型變量還是一個字符串型變量。
  • 解決:將index變量的類型更改為Int32型;或者不更改變量類型,直接設置index變量的默認值為0。將一個GenericValue型變量的默認值設置為""(空)則表示這是一個字符串型變量。
  • Bug2:在循環進行了幾次后報錯,顯示索引號超過數組邊界。filesArray中有5個元素,執行循環的條件是index<=filesArray.Count,即index<=5。而數組的索引號是從0開始的,因此fileArray的最后一個元素表示為fileArray(4)。在當index=5時,filesArray(index)就超出了數組邊界。
  • 解決:將循環條件更改為index<filesArray.Count。
  • Bug3:雖然fileArray中有5個元素,但實際上只存在4個文本文件,因此最終的consolidate.txt里應該只有4行內容,但實際運行后卻有5行,且第5行和第4行的內容都是第4個文本文件的內容。原因是,雖然UiPath在讀取第5個文件時Catch了Read Text File活動的錯誤,但是由於Append Line活動和Read Text File活動不在同一個Try Catch里,Append Line活動依然被執行了(相當於把第4個文本文件的內容又黏貼了一遍)。
  • 解決:將Append Line活動和Log Message活動都放到第一個Try Catch的Try部分。

 

*本課使用過的新活動、方法、函數等:

Wait Element Vanish活動

Wait Image Vanish活動

Try Catch活動

Rethrow活動

Invoke Workflow File活動

Append Line活動

cashIn=cint(row("Cash In"))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM