我在使用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都會顯示子對象。
構建代理和我的本地機器都運行帶有.Net 4的Windows 7 SP1。在這兩種情況下,我都運行nunit-console.exe來啓動測試。我在機器之間複製整個環境,所以它不僅是同一版本的nunit和我的應用程序的二進制文件,它完全相同的文件,配置,庫等.nunit控制檯以管理員用戶身份運行。
如果您有權訪問生成代理機器,是否可以在那裏登錄,請手動運行nunit控制檯,然後查看測試是否有效?在查找呼叫之前添加睡眠是否有幫助?我見過不合適的spec'd代理機器做這樣的事情。 – 2012-07-09 22:14:34
使用nunit-console或基於GUI的nunit.exe手動運行測試都會導致相同(缺失的元素)行爲。 – 2012-07-10 12:02:43