2012-07-09 35 views
3

我在使用NUnit 2.5.10測試中的Microsoft UI Automation API爲WPF應用程序執行自動UI測試。Windows UI自動化API在服務器上運行時未找到子元素

在某些情況下,在我的開發機器上運行測試可以找到某些UI元素,但是當我們的構建代理機器上的相同二進制文件運行相同的腳本時,無法找到這些元素。

我無法找到代理機器行爲不同的任何原因。我懷疑它與UIAccess標誌或UAC有關,但沒有遇到任何特定的問題。

任何人都可以提供一些指導,爲什麼構建代理將有不同的行爲,或如何修復代理看到我的其他機器相同的元素?

例如,我有一個comboBox,其中有大約十幾個選項。使用Win7 SDK中的「Inspect Objects」工具,我可以看到每個選項都有一個具有實際顯示文本的子元素。所以在我的測試代碼,我做這樣的事情:

// get the child elements 
var options = comboBoxElement.FindAll(TreeScope.Children, (System.Windows.Automation.Condition) new PropertyCondition(AutomationElement.IsControlElementProperty, (object) true)); 

foreach (AutomationElement child in viewOptions) 
{ 
    var subControls = child.GetChildren(); 
    Console.WriteLine("Child: {0} w/ {1} children", child.Current.Name, subControls.Count); 
    foreach (AutomationElement subControl in subControls) 
     Console.WriteLine("SubControl: {0}", subControl.Current.Name); 
} 

在我的dev的機器,我得到這些結果:

Child: My.BoundObject.ClassName w/ 1 children 
SubControl: Displayed Text for first item 
Child: My.BoundObject.ClassName w/ 1 children 
SubControl: Displayed Text for second item 
Child: My.BoundObject.ClassName w/ 1 children 
SubControl: Displayed Text for third item 

但在服務器上,我得到這個:

Child: My.BoundObject.ClassName w/ 0 children 
Child: My.BoundObject.ClassName w/ 0 children 
Child: My.BoundObject.ClassName w/ 0 children 

在這兩種情況下,Inspect Objects都會顯示子對象。 Inspect Options screenshot

構建代理和我的本地機器都運行帶有.Net 4的Windows 7 SP1。在這兩種情況下,我都運行nunit-console.exe來啓動測試。我在機器之間複製整個環境,所以它不僅是同一版本的nunit和我的應用程序的二進制文件,它完全相同的文件,配置,庫等.nunit控制檯以管理員用戶身份運行。

+0

如果您有權訪問生成代理機器,是否可以在那裏登錄,請手動運行nunit控制檯,然後查看測試是否有效?在查找呼叫之前添加睡眠是否有幫助?我見過不合適的spec'd代理機器做這樣的事情。 – 2012-07-09 22:14:34

+0

使用nunit-console或基於GUI的nunit.exe手動運行測試都會導致相同(缺失的元素)行爲。 – 2012-07-10 12:02:43

回答

5

在多臺機器上運行的情景後,我能夠確定與.net 4.5安裝這些機器都能夠訪問子元素,而那些只有.NET 4.0沒有。請注意,應用程序和測試都是爲.Net 4.0編譯的。

希望這可以幫助解決此問題的其他人。

+0

+100 - 你讓我從無用的進一步顛簸中解脫出來! – Gishu 2013-05-31 11:34:00

+0

@Gishu,非常感謝!在發佈這個問題之前,我已經自殺了很多,我可以同情你的情況。 Stackoverflow的勝利! – 2013-05-31 15:33:51

+0

@JohnM。賴特你能提供一個URL來解釋爲什麼它以這種方式工作嗎?這聽起來並不直觀,爲什麼會出現這種情況。 – gonzobrains 2013-07-11 17:42:26

0

請選擇用戶版本的Windows而不是服務器版本。即Windows2003/Windows2008上的XP/Windows7。 UIA的自動化支持在服務器版本的Windows中通常很差。

check out here

+0

正如我在我的文章中所提到的,代理機器和我的開發盒都運行Windows 7 SP1 – 2012-07-10 02:19:51

相關問題