UIA - 在列表视图更改时,AutomationElement不会返回正确的名称

时间:2013-11-21 15:43:06

标签: c#-4.0 automation ui-automation microsoft-ui-automation

我正在尝试使用自动化阅读“列表视图”的内容。我第一次导航到它时,我能够从一个项目到另一个项目,为每个列表项目获取正确的文本。但是,当我显示不同的屏幕(显然重复使用此显示对象)时,屏幕上的文本会有所不同,但自动化会获得与第一组相同的文本。从那时起,我只能得到我看到的第一个视图的文本。就像文本被缓存一样,我只能查看缓存的视图。然而,UISpy似乎每次都抓住正确的值,如果我在自动化暂停时使用它,我最终会得到正确的值。

在我的自动化中,我使用Find来抓取标题,然后将树移动到List View并获取每个元素的文本。我想如果你使用Current属性,你就得到了实时数据。显然我错了。如何刷新树或获取REAL数据?

1 个答案:

答案 0 :(得分:0)

是的,某个Current上的AutomationElement属性将返回其当前的“实时”值。 UIA不会自动缓存任何内容,您必须自己声明并明确访问Cached属性。

可能发生的事情是,您选择不同屏幕后看到的新树项实际上是重新创建的(实际上是有意义的,UI方式),而不仅仅是更新。您可以通过选择第一个屏幕并记下树项“RuntimeId属性(您可以在UI Spy中看到它)轻松确定这是否是问题。然后,选择第二个屏幕并检查RuntimeId是否已更改。如果有,那么它就不是同一个对象实例。

如果是这种情况,您需要做的就是再次获取物品。使用具有AutomationElement.FindAll属性条件的ClassName来执行此操作会更容易。