我们为我们的 WPF 应用程序 (.NET 4) 进行了一些自动化 UI 测试;这些测试使用UI 自动化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
树自己手动行走...据我所知,这应该可以工作,因为我的树打印机实用程序功能就是这样做的,没关系,但是它似乎这是不必要且缓慢的:-(
任何帮助将不胜感激