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

3
我正在使用Microsoft UI Automation API在NUnit 2.5.10测试中执行WPF应用程序的自动化UI测试。但是,有些情况下,在我的开发机上运行测试能够定位到某些UI元素,但是当相同的脚本在我们的构建代理机器上运行时,它无法定位到这些元素。我找不到代理机器行为不同的原因。我怀疑这与UIAccess标志或UAC有关,但没有遇到具体的内容。请问有人能够提供一些指导,为什么构建代理会有不同的行为,或者如何修复代理以查看与其他机器相同的元素?例如,我有一个comboBox,其中有大约十几个选项。使用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 Options screenshot

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


如果您可以访问构建代理机器,能否登录并手动运行nunit-console,看看测试是否正常工作?在查找调用之前添加一个延迟是否有帮助?我曾经见过规格不足的代理机器做出这样的事情。 - Mike Zboray
手动运行测试,无论是使用nunit-console还是基于GUI的nunit.exe,都会导致相同的(缺少元素)行为。 - John M. Wright
2个回答

7

在多台计算机上运行测试后,我确定安装了 .Net 4.5 的计算机可以访问子元素,而只安装了 .Net 4.0 的计算机却不能。请注意,应用程序和测试都是为 .Net 4.0 编译的。

希望这能帮助遇到这个问题的其他人。


+100 - 你救了我,让我不再徒劳无功地挣扎!! - Gishu
@Gishu,非常感谢!在发布这个问题之前,我自己也曾经挣扎了很久,所以我能够理解你的处境。Stackoverflow 赢了! - John M. Wright
@JohnM.Wright,您能提供一个文档链接来解释为什么它会以这种方式工作吗?我觉得这并不是很直观,为什么会这样。 - gonzobrains
@gonzobrains,我没有找到有关从4.0到4.5的更改的任何文档 - 我的判断仅基于在安装了4.0或4.5的多台计算机上运行我的代码时观察到的行为。抱歉。 - John M. Wright
好的。我只是在尝试解决一个类似的问题,这个问题与除非我以提升的权限运行客户端,否则无法找到元素有关,尽管用户帐户已经是管理员。 - gonzobrains

0
请选用用户版的Windows系统而非服务器版。例如,XP/Windows7而非Windows2003/Windows2008。自动化支持UIA在Windows服务器版本中通常较差。 点击这里查看

正如我在帖子中提到的那样,代理机和我的开发电脑都运行着Windows 7 SP1。 - John M. Wright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接