2011-05-16 39 views
2

有點背景...爲什麼在UI自動化客戶端中捕獲的異常出現在UI中自動執行?

我正在開發一個UI自動化應用程序,它隨機與我們的UI上的控件交互。應用程序和UI自動化都是WPF應用程序。我正在使用UI自動化輔助功能框架。偶爾我會在我的應用程序中收到並處理一個ElementNotAvailableException。當使用ANTS 7分析我們的用戶界面時,我注意到這些異常顯示在第2代垃圾堆上。異常的新實例匹配我在應用程序中發現異常的次數。

我看過使用WinDBG,UIAutomation頁面的GCRoot,並且我還沒有找到明確的解釋說明爲什麼捕獲的異常出現在應用程序自動化中。當UI被自動化時,這些對象不會被釋放,甚至當我關閉自動化應用程序時仍然保留。

任何想法?

回答

1

不知道它到底是如何實現的,我們可以知道,爲了讓UI自動化做它需要做:

  • 儀器和
  • 進程間通信

工具部分由基本上編譯到UI框架中的所有類中或添加到框架中的基礎結構組成,如果您願意,可以將它們掛鉤。它「感染」主機應用程序並在其中運行一個小型應用程序。

進程間通信部分需要在客戶端和主機之間傳遞非圖形信息,如文本框的實際內容。這聽起來很簡單,但是在兩個進程之間調用注入和交換類型和值。

現在,當您將這兩件事情結合起來時,可以將異常作爲進程間通信的一部分進行交換,並且該異常可以作爲自動化框架的迷你應用程序的參考,並且對於如何將異常它可能發生。在你的情況下,如果你足夠好奇,或者有足夠的動機(可能是一個bug),你可以繼續用各種工具鑽研這個問題。你有調試器,ILSpy,黑盒實驗,堆工具等。這取決於你需要走多遠。

+0

感謝您的回覆。我的懷疑是自動化應用程序和UI之間的通信,導致出現在UI中的異常由於未處理而自動執行。我會進一步看一些更多的調試工具。 – Raffledoocious 2011-05-17 15:24:17