C# UISpy和UIA验证在同一程序上显示不同的属性值
我有一个我正在测试的程序,它的关闭按钮在一个点启用,在另一个点禁用。 UISpy在两个点显示“isEnabled”为“true” UIAVerify在第一点显示“isEnabled”,在第二点显示“false” 后者是我可以从视觉上确认为真的,通过编程,我得到的值与UISpy相同,而我的测试用例失败了 使用System.Windows.Automation 树结构: 对话框“程序名” 标题栏“程序名” 按钮“关闭”C# UISpy和UIA验证在同一程序上显示不同的属性值,c#,.net,ui-automation,microsoft-ui-automation,ui-spy,C#,.net,Ui Automation,Microsoft Ui Automation,Ui Spy,我有一个我正在测试的程序,它的关闭按钮在一个点启用,在另一个点禁用。 UISpy在两个点显示“isEnabled”为“true” UIAVerify在第一点显示“isEnabled”,在第二点显示“false” 后者是我可以从视觉上确认为真的,通过编程,我得到的值与UISpy相同,而我的测试用例失败了 使用System.Windows.Automation 树结构: 对话框“程序名” 标题栏“程序名” 按钮“关闭” 有人知道这可能是什么原因吗?UIA Verify是否使用与UISpy不同的库?U
有人知道这可能是什么原因吗?UIA Verify是否使用与UISpy不同的库?UIA Verify 2.0使用更新的本机COM UIA库,该库与Windows 7一起在UIA 3.0更新中发布(也可作为单独的修补程序KB971513用于Vista和XP SP3)。另一方面,我认为UISpy使用了最初的托管API 我使用
.isEnabled()
和.invoke()
方法处理托管库时遇到间歇性问题,我可以通过迁移到COM库来纠正这些问题,COM库总体上比托管库更稳定、更快
我记不起迁移过程的细节,但基本上您需要生成一个互操作DLL,它允许您的.NET应用程序调用本机UIA方法。然后,您可以选择创建自己的包装器库,或者可能使用下面提到的包装器库之一
我建议参考以下内容,以帮助实现过渡:
- -早期尝试为COM API创建包装。我在直接使用它时遇到了麻烦,但最初看一下它是有帮助的。还可以搜索一些MSDN支持论坛上关于此包装器开发人员制作的COM API的帖子。不幸的是,我无法链接到它们,因为我的StackOverflow rep(长期潜伏者,第一次回答者)很低
- -您可以看到,他们的源代码中有一个用于访问COM接口的UIAComWrapper。您还可以在该项目中查看他们是如何生成互操作DLL的
.isEnabled()
和.invoke()
方法处理托管库时遇到间歇性问题,我可以通过迁移到COM库来纠正这些问题,COM库总体上比托管库更稳定、更快
我记不起迁移过程的细节,但基本上您需要生成一个互操作DLL,它允许您的.NET应用程序调用本机UIA方法。然后,您可以选择创建自己的包装器库,或者可能使用下面提到的包装器库之一
我建议参考以下内容,以帮助实现过渡:
- -早期尝试为COM API创建包装。我在直接使用它时遇到了麻烦,但最初看一下它是有帮助的。还可以搜索一些MSDN支持论坛上关于此包装器开发人员制作的COM API的帖子。不幸的是,我无法链接到它们,因为我的StackOverflow rep(长期潜伏者,第一次回答者)很低
- -您可以看到,他们的源代码中有一个用于访问COM接口的UIAComWrapper。您还可以在该项目中查看他们是如何生成互操作DLL的