【发布时间】:2011-01-06 21:23:38
【问题描述】:
我们为 WPF 应用程序 (.NET 4) 进行了一些自动化 UI 测试;这些测试使用UI Automation API。
我们调用AutomationElement.FindFirst寻找目标元素,然后与之交互。
示例(伪代码):
var nameEquals = new PropertyCondition(AutomationElement.NameProperty, "OurAppWindow");
var appWindow = DesktopWindow.FindFirst(TreeScope.Children, nameEquals);
// this succeeds
var idEquals = new PropertyCondition(AutomationElement.AutomationIdProperty, "ControlId");
var someItem = appWindow.FindFirst(TreeScope.Descendants, idEquals);
// this suceeds sometimes, and fails sometimes!
问题是,appWindow.FindFirst 有时会失败并返回 null,即使元素存在也是如此。我编写了一个辅助函数,它手动遍历 UI 自动化树并将其打印出来,并且在所有情况下都存在具有正确 ID 的元素。
这似乎与窗口中还显示了多少其他项目有关。如果没有其他项目,那么它总是会成功,但是当它旁边显示许多其他复杂的 UI 元素时,则查找失败。
似乎我们正在达到某种内部元素限制。我找不到任何自动化 API 提到的任何记录的元素限制 - 有没有办法解决这个问题?我在想我可能必须编写自己的FindFirst 实现,它自己手动行走树...据我所知,这应该可以工作,因为我的树打印机实用程序功能正是这样做的,没关系,但似乎这是不必要且缓慢的:-(
任何帮助将不胜感激
【问题讨论】:
-
我从几天前就开始使用 UI 自动化框架工作了,我发现有多少错误真的很遗憾。它在所有级别上都充满了错误。微软做了一件非常草率的工作。但是错误似乎在框架的服务器端,因为如果您自动化 Win32 或 WPF 或 .NET Forms 应用程序,它会产生很大的不同。根据底层 UI 框架,您会遇到其他类型的错误。此外,许多控件根本不受支持,或者功能太基本以至于您无法自动化它们。
标签: wpf ui-automation