加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:43:40 所属栏目:Windows 来源:网络整理
导读:我正在使用UI自动化COM-to-.NET适配器来读取在 Windows 7上播放FLASH内容的目标Google Chrome浏览器的内容.它可以正常工作. 我成功地获得了内容和元素.一切都运行良好一段时间,但几个小时后,元素变得无法访问. (AutomationElement).FindAll()返回0个子节点.
我正在使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读