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