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

前端之家收集整理的这篇文章主要介绍了com – Microsoft UIAutomation中是否存在内部超时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用UI自动化COM-to-.NET适配器来读取在 Windows 7上播放FLASH内容的目标Google Chrome浏览器的内容.它可以正常工作.

我成功地获得了内容和元素.一切都运行良好一段时间,但几个小时后,元素变得无法访问.

(AutomationElement).FindAll()返回0个子节点.

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

根据这个IUIAutomation2 interface
有2次超时,但无法从IUIAutomation界面访问它们.
IUIAutomation2仅在Windows 8(仅限桌面应用程序)上受支持.

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

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

有没有人知道发生了什么以及如何解决

解决方法

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

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

作为一种解决方案(似乎大部分时间都可以工作 – 或者改善情况很多),我认为我应该给测试中的应用程序一些呼吸点,因为使用UIA会给它带来额外的负担.这可能是您客户端中的智能睡眠点,但我没有在设定的时间内休眠,而是监视应用程序的处理器负载并等待它稳定下来.

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

我还应该补充一点,我还通过合并更多的ui缓存(FindAllBuildCache)减少了对UIA的调用次数,因为来回的频率越少,对uia来说就越好.感谢Guy在另一个问题上的答案:UI Automation events stop being received after a while monitoring an application and then restart after some time

猜你在找的Windows相关文章