2011-03-28 124 views
5

我有一個應用程序,可以在任意Windows應用程序上執行一些自動操作。我一直在使用記事本來測試它。UIAutomation和遠程桌面連接

在這個自動化過程中,我必須從代​​碼中調用事件。我目前支持兩種類型的事件,因爲它們似乎是最常見的,InvokePatternExpandCollapsePattern

我用一臺可以遠程桌面進入的計算機來做測試。但這很奇怪。當我通過遠程桌面連接到計算機時,該應用程序正常工作。當我從電腦斷開連接時,我的代碼停止工作在ExpandCollapsePattern(InvokePattern工作正常)。我得到一個InvalidOperationException。

該文檔說,只有當節點被標記爲LeafNode時才應該拋出這個問題。是什麼讓遠程桌面不同,我得到InvalidOperationException?

這是我目前必須執行的事件的代碼。

ExpandCollapseState state = 
    patternMenu.Current.ExpandCollapseState; 
if (state == ExpandCollapseState.Expanded) 
    patternMenu.Collapse(); 
else if (state == ExpandCollapseState.PartiallyExpanded || 
     state == ExpandCollapseState.Collapsed) 
    patternMenu.Expand(); 

patternMenu是使用GetCurrentPattern從AutomationElement獲取的ExpandCollapsePattern。

當我打印出該值時,ExpandCollapseState的當前值爲「Collapsed」。

編輯:任何機會,我可以知道爲什麼我得到了downvote,以及這是一個壞的問題?我真的對發生的事情感到困惑,因爲它只在遠程桌面關閉時似乎失敗。如果這是一個非常愚蠢的問題,我應該知道答案,我會喜歡解釋,然後downvote。

與桌面交互的過程不是Windows服務。這是我在遠程桌面進入電腦後開始的一個應用程序。是因爲我鎖定了桌面嗎?

我在Ubuntu上使用「終端服務器客戶端」登錄Windows機器。按下此應用程序上的關閉按鈕是否會導致桌面鎖定?

回答

2

一般而言,通常不能在非交互式桌面上運行UI自動化或類似功能。非交互式桌面在輸入方面有各種限制:沒有關注的元素,輸入不能發送,所以依賴於這些的任何東西都會失敗。

一些功能,如發送Windows消息,將正常工作。這裏可能發生的事情是InvokePattern功能在封面上作爲消息來實現,所以仍然有效;但展開/摺疊可能會以輸入的方式實施,這將失敗。

不清楚爲什麼,在你的情況下,當您關閉客戶端(即部分預期)失敗,但 時會出現遠程桌面鎖本身的工作 - 它期望的行爲在兩種情況下相同。 (請注意,如果本地 Ubuntu桌面鎖,都應該沒問題,只要客戶端仍在運行,遠程客戶端仍然是「交互式」的,因爲它有一個活的客戶端無論客戶端本身是在交互式還是非交互式桌面上運行 - 這些概念可能甚至不適用於在另一個操作系統上運行的客戶端!)

+0

我認爲當桌面鎖定自己時它運行良好, 但是我錯了。一旦桌面自動鎖定,最新的測試結果就開始失敗。我將開始設置虛擬機來運行測試,而不是使用遠程桌面。謝謝。 – 2011-03-29 02:12:18