3

我在 NUnit 2.5.10 测试中使用Microsoft UI 自动化 API来为 WPF 应用程序执行自动化 UI 测试。

在某些情况下,在我的开发机器上运行测试能够找到某些 UI 元素,但是当在我们的构建代理机器上针对相同的二进制文件运行相同的脚本时,它无法找到这些元素。

我找不到代理机器行为不同的任何原因。我怀疑它与 UIAccess 标志或 UAC 有关,但没有遇到任何具体的问题。

任何人都可以就构建代理为什么会有不同的行为提供一些指导,或者如何修复代理以查看与我的其他机器相同的元素?

例如,我有一个组合框,里面有十几个选项。使用 Win7 SDK 中的“检查对象”工具,我可以看到每个选项都有一个子元素,其中包含实际显示的文本。所以在我的测试代码中,我做了这样的事情:

// 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);
}

在我的开发机器上,我得到以下结果:

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 控制台以管理员用户身份运行。

4

2 回答 2

7

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

希望这可以帮助遇到此问题的其他人。

于 2012-07-10T18:59:37.163 回答
0

请选择 windows 的用户版本而不是服务器版本。即 Windows2003/Windows2008 之上的 XP/Windows7。UIA 的自动化支持在 Windows 的服务器版本中通常很差。

在这里查看

于 2012-07-09T22:50:19.613 回答