如何访问不受支持的UI元素?

时间:2012-06-11 15:21:58

标签: delphi ui-automation coded-ui-tests

我想用Coded UI Tests测试一个Delphi应用程序,但是我遇到了一些问题。我想访问UI中的一些元素,但无法访问所有元素。

屏幕上有一些列表(根据搜索参数),我想访问这些行以检查值的一致性。但是随着Coded UI Test Builder的交叉,我无法访问应用程序上的行。如何访问行?

我刚刚找到了一个解决方案:为Coded UI Tests开发一个扩展,以便与我的Delphi应用程序the sample on the Microsoft Web site正确交互。它是Excel的扩展,允许您访问每个单元格。但这听起来很难,我必须测试的应用程序也非常复杂。

1 个答案:

答案 0 :(得分:1)

如果您的界面是普通的VCL,则可以使用其下方HWND句柄访问大多数组件。它适用于TEdit TMemo TComboBox TCheckBox等等。但是一些图形组件将无法从GDI消息中访问,例如TLabelTGrid

所以我猜你必须在你的应用程序中使用Delphi插件,才能访问VCL组件级别。使用ComponentCount + Components[]的{​​{1}}属性(通过递归调用)访问要测试的组件。然后将其属性发布到要编写的Coded UI Tests扩展中。

我在这里谈到一个“插件”,因为我认为我们不能轻易访问所有要监视/修改的类。一些“插件”架构可以帮助应用程序在测试阶段照常工作,或者在“编码的UI测试模式”下工作。也许更好的是为测试目的分离编译:你应该更好地测试最终编译的可执行文件。如果您只想进行单元测试,则可以重新编译,存根和模拟您的应用程序,以仅测试给定的表单。但是你需要对表单进行编码以便进行单元测试(使用依赖注入等),这在默认的Delphi世界中并不容易(与其他RAD方法一样)。

启动一个开源项目(包含在DUnit中?)开发这样一个平台可能会很有趣。或者使用现有的用于Delphi的UI测试框架作为基础。我们工作的很多公司都在混合.Net和Delphi技术,并且会为这样的工具带来好处。