我有一个我正在测试的程序,它在某一点启用了关闭按钮,在另一点启用了禁用。 UISpy在两个点显示'isEnabled'为'true' UIAVerify在第一点显示'isEnabled'为'true',在第二点显示为'false'
后者是我可以在视觉上确认为真的,以编程方式获得与UISpy相同的值并且我的测试用例失败。
使用System.Windows.Automation;
树形结构: “对话框”“ProgramName” “标题栏”“ProgramName” “按钮”“关闭”
是否有人知道可能导致此问题的原因? UIA Verify是否使用与UISpy不同的库?
答案 0 :(得分:0)
UIA Verify 2.0使用UIA 3.0更新与Windows 7一起发布的较新的本机COM UIA库(也可用作Vista和XP SP3的单独修补程序KB971513)。另一方面,我认为UISpy使用原始的托管API。
我使用.isEnabled()
和.invoke()
方法在托管库中出现间歇性问题,我可以通过迁移到COM库来纠正这种问题,这似乎比整个库更稳定,更快速。托管图书馆。
我不记得迁移过程的具体细节,但基本上你需要生成一个允许.NET应用程序调用本机UIA方法的互操作DLL。然后,您可以选择创建自己的包装器库,也可以使用下面提到的那些。
我建议您参考这些内容以获得转换的帮助:
UI Automation COM-to-.NET Adapter - 早期尝试为COM API创建包装器。我很难直接使用它,但最初看看是有帮助的。还搜索有关此包装开发人员制作的COM API的一些MSDN支持论坛帖子。我很遗憾无法链接到他们,因为我的StackOverflow代表很低(长时间潜伏,第一次回答)。
UIA Verify Source Code - 您可以看到他们在源代码中有一个用于访问COM接口的UIAComWrapper。您还可以查看该项目是如何生成互操作DLL的。