Com Microsoft UIAutomation中是否存在内部超时?

Com Microsoft UIAutomation中是否存在内部超时?,com,ui-automation,microsoft-ui-automation,uia,Com,Ui Automation,Microsoft Ui Automation,Uia,我正在使用UI-Automation-COM-to-.NET适配器读取目标Google Chrome浏览器的内容,该浏览器在Windows 7上播放FLASH内容。它起作用了 我成功地获得了内容和元素。在一段时间内,一切正常,但几小时后,元素变得无法访问 (AutomationElement).FindAll()返回0子级 UIAutomation是否使用任何内部未记录的超时 据此, 有2个超时,但无法从IUIAutomation接口访问。 IUIAutomation2仅在Windows 8上受

我正在使用UI-Automation-COM-to-.NET适配器读取目标Google Chrome浏览器的内容,该浏览器在Windows 7上播放FLASH内容。它起作用了

我成功地获得了内容和元素。在一段时间内,一切正常,但几小时后,元素变得无法访问

(AutomationElement).FindAll()返回0子级

UIAutomation是否使用任何内部未记录的超时

据此, 有2个超时,但无法从IUIAutomation接口访问。 IUIAutomation2仅在Windows 8上受支持(仅限于桌面应用程序)

所以我相信有一些暂停。 我做了一个变通方法,从桌面树的开始重新开始搜索和监视元素,但是元素仍然不可用。 一段时间后(不确定有多少)这些元素再次可用。 我的要求是尽可能快地读取所有值,但这种行为会对整个体系结构造成损害。 我在某处读到有3分钟的超时,但不确定

如果有超时,是否可以更改它? 是否可以重新启动或释放/处置某些内容? 我在MSDN上找不到任何东西


有人知道发生了什么事以及如何解决吗?

谢谢你提出这个问题。我有一个非常不同的设置类似的问题。我在Win7上,直接从C#使用UIAutomationCore.dll测试我们正在开发的应用程序。在运行我的操作和事件订阅序列以及所有其他事情之后,我间歇性地观察到UIA接口停止工作(在我的情况下,大约8-10分钟,但我大量使用UIA接口)

许多不同的事情都失败了,包括调度COM接口、在不同的地方睡觉。有趣的是,我在测试期间设法使用了AccEvent.exe(SDK的一部分,如inspect.exe),并且看到事件也停止流向AccEvent。因此,停止响应的不是我的客户端接口,而是COM服务器(或UIAutomationCore所做的任何事情)

作为一种解决方案(这似乎在大多数情况下都有效——或者改善了很多情况),我决定给被测应用程序一些喘息点,因为使用UIA会给它带来额外的负载。这可以巧妙地在客户端设置睡眠点,但我不是在设定的时间睡眠,而是监视应用程序的处理器负载并等待它稳定下来

当问题出现时,我收到的一个间歇性错误是“…无法呼叫任何订阅者…”,我的搜索结果是一个msdn页面,上面说他们改进了CUIAutomation8界面,但由于这是特定于Windows8的,我还没有机会尝试


我还应该补充一点,我还通过合并更多的ui缓存(FindAllBuildCache)减少了对UIA的调用数量,因为来回的频率越低,UIA就越好。多亏了盖伊在另一个问题中的回答:

我认为Windows 8之前没有超时。事实上,对于需要永久处理的请求,还有更多的问题-因此有了这个新的超时特性。如果它能工作,然后在几个小时后停止,它看起来就像一个bug(例如,它会无声地耗尽资源)。可能是UIA或目标应用程序中的错误。如何为chrome启用UIA?我没有以任何特殊方式启用UIA。我使用的是定制的Chrome浏览器。总之,结构很简单。镀铬窗口、窗格1、窗格2、闪光对象。然后看起来Chrome实现了类似FLASH对象的自定义控件,可以通过UIAutomation访问这些控件。但是,这些控件不是使用可访问性界面创建的,因此它们没有直接的AutomationID。这使得阅读有点困难。这就是为什么我需要阅读第一个可访问的父对象,并始终刷新内容。