Windows UI Automation API在服务器上运行时无法查找子元素

Joh*_*ght 3 c# nunit-2.5 microsoft-ui-automation

我正在使用NUnit 2.5.10测试中的Microsoft UI Automation API来为WPF应用程序执行自动UI测试.

在某些情况下,在我的开发机器上运行测试能够找到某些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);
}
Run Code Online (Sandbox Code Playgroud)

在我的开发机器上,我得到了这些结果:

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
Run Code Online (Sandbox Code Playgroud)

但是在服务器上,我得到了这个:

Child: My.BoundObject.ClassName w/ 0 children
Child: My.BoundObject.ClassName w/ 0 children
Child: My.BoundObject.ClassName w/ 0 children
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,Inspect Objects都会显示子对象. 检查选项屏幕截图

构建代理和本地计算机都运行带有.Net 4的Windows 7 SP1.在这两种情况下,我都运行nunit-console.exe来启动测试.我正在复制机器之间的整个环境,因此它不仅是nunit和我的应用程序的二进制文件的相同版本,它完全相同的文件,配置,库等.nunit-console以管理员用户身份运行.

Joh*_*ght 6

在多台机器上运行方案后,我能够确定安装了.Net 4.5的那些机器能够访问子元素,而只有.Net 4.0的那些机器则不能.请注意,应用程序和测试都是针对.Net 4.0编译的.

希望这有助于遇到此问题的任何其他人.