为什么Coded UI无法识别某些控件?

时间:2013-11-22 16:15:23

标签: c# user-interface automation coded-ui-tests

在Web应用程序上,我注意到Coded UI没有捕获某些类型的控件,就像普通的html控件一样,这会抑制我对这些元素进行数据驱动的能力。

这些控件的一些示例是Telerik Ajax控件和Ideal Forms,它是一个类似于bootstrap的js框架。

导致Coded UI与这些类型控件之间不兼容的原因是什么?除了替换应用程序的控件之外,还有其他工作吗?

3 个答案:

答案 0 :(得分:2)

编码的UI使用MSAA(Microsoft Active Accessibility)或UIA(UI Automation)接口访问应用程序。最初提供这些界面是为了允许视障人士使用屏幕阅读器,或者为灵巧问题的人提供其他形式的键盘和鼠标。编码的UI使用这些接口并以与这些程序驱动应用程序相同的方式驱动应用程序。

必须编写应用程序的UI控件以支持MSAA或UIA。几乎所有最近的Microsoft控件都支持这些接口,因此在较旧的接口(如MFC和Win32)中支持有限。除非实现MSAA或UIA接口,否则不支持自定义控件。某些第三方自定义控件不支持这些接口。检查他们的支持页面,看看不同版本支持的Coded UI支持的级别。

许多第三个控件的最新版本支持Coded UI。

答案 1 :(得分:2)

由于之前的答案已经涵盖了原因,我将专注于“现在是什么?”

我们已经采用各种工作来处理难以理解的控件。

  • 屏幕点:一个应用程序呈现了一个表单,该表单将ui视为空白窗口。我们在测试期间调整应用程序的大小,以确保一致的放置和使用屏幕点。这具有最高的维护,对良好测试实践的最少遵守,以及肮脏的黑客攻击。
  • 键盘快捷键 - 用于遍历编码ui的列表/下拉列表无法看到我们使用其他一个hack点击对象,然后使用向下键基于结构的struct,enum或xml进行导航。当选项更改位置/顺序时,足够容易更新它们
  • sikuli - 最有效,但有时最难以使用的是图像验证。我们采用控件的屏幕截图并使用sikuli代码通过从编码的ui内部调用sikuli脚本来与对象进行交互。因为这不在编码的ui中,所以不会自动包含日志记录。误报和漏报可以在大部分时间内解决。
  • 避免 - 如果我们无法验证控制编码的ui中看不到的内容,我们将报告该部分不是自动化候选者,需要手动检查

答案 2 :(得分:1)

Microsoft Coded UI最后我不知道支持Telerik控件。编码的UI在许多第三方控件(Telerik,Infragistics等)上无法正常工作。唯一的选择是将控件更改为更原生,或使用不同的自动化测试工具,例如HP Quick Test Professional或Telerik等。