几乎一切正常……我可以安装事件处理程序,在树中导航,使用各种条件搜索元素并使用它们的模式控制找到的元素.
但是昨天我发现了一种令我绝望的行为:我的AUT的UIA树在通过点击其主菜单按钮切换其GUI主面板后根本没有更新.
单击主菜单按钮后,我可以在AUT的GUI中看到新的小部件,但是UIA树仍然包含在单击主菜单按钮之前已经存在的控件. (过时的)UIA树仍然可以使用搜索功能或使用walker完全读取,但当然由于小部件不再存在而无法写入.
这看起来好像会有一个过时的缓存…但是我根本不使用任何缓存UIA功能.没有.决不.无处.
我无法以编程方式更新UIA树…既不能通过调用任何UIA函数,也不能通过重新启动测试器应用程序,也不能来回切换AUT的GUI.
这不会每次都发生.有时单击主按钮后,树似乎是最新的,一切正常.但是大多数运行都失败了.
只有一种(神秘的)方式可靠地更新UIA树:使用inspect.exe.当使用inspect.exe工具简要查看AUT的UIA子树时,问题突然消失,我的测试人员应用程序可以立即访问实际更新的树!当然重启AUT后问题会重新出现.
inspect.exe做什么来使UIA树(另一个应用程序!!!)更新?如何在不使用任何缓存的情况下访问已删除的元素?我错过了什么?
我真的需要帮助.
好的,还有一些发现:
> UISpy.exe能够以与inspect.exe相同的神秘方式刷新UIA树(这特别奇怪,因为inspect.exe使用与我相同的本机接口,但UISpy.exe使用.NET接口AFAIK).这意味着这是一种系统范围内持久的UIA问题,而不是纯粹的原生UIA问题.
>如果在切换视图之前不访问树,则不会发生此问题.即如果我的测试者应用程序在通过单击主菜单按钮切换视图之前没有访问AUT’S视图,它会看到新的小部件没有问题.这强烈表明了本机UIA API的一些缓存问题 – 即使我不知道如何发生这种情况,因为我根本不缓存.有人知道是否有一些内部缓存发生?
我认为这可能是一个API错误.但是考虑到我目前使用Microsoft Connect的经历,我有点迷失于那个showstopper