代理部署最佳实践

以下开发代理的最佳实践可以帮助您的工作更加高效和有效。考虑使用这些方法来提高开发效率。
使用 GUI 对象相应的层次结构

GUI 对象分布在两种相关的层次结构中:父子和所有与被所有。 父子关系的例子是对话框和包含的按钮。 所有和被所有关系的例子是顶级窗口和对话框。使用对象的任意一种层次结构类型。

在代理实现中,对于底层的对象模型(例如 Java™ 和 HWND)来说,通常会混淆这两种关系,并将所有和被所有关系视为非对称的父子关系。在这种情况下,如果首选关系模型是所有/被所有,那么代理不能包含父代。整个层次结构中均可使用的方法有 getParent()、getChildren()、getOwner() 和 getOwned()。

避免返回不同类型的同一属性

属性是命名的值。属性本身不包含类型;但值包含类型。避免代理返回不同类型的相同属性。有时属性值可能是对象引用,而不是值引用。如果将该值返回到脚本,那么将其返回为 TestObject。 访问属性的方法包括 getProperty()、setProperty()、getProperties() 和 getNonValueProperties()。

使用对象库来分配对象的识别属性和权重

缺省情况下,新的代理对象不会包含对象识别属性和权重。使用对象库来分配识别属性和权重。访问对象识别属性和权重的方法是 getRecognitionProperties() 和 getRecognitionPropertyWeight()。如果父代对象内存在相同类的多个对象,那么添加 .classIndex 属性(负的数字值,由 0 开始)作为子代对象的识别属性。

管理可映射的层次结构

通常,对象的整个层次结构均是可映射的。但是,某些对象很可能会在测试应用程序构建之间频繁更改。例如在 Java 中,最常见的是将面板一起添加到集群对象。使用 Functional Tester,用户可以指定不要映射代理对象。即使非映射对象不在测试对象映射中,在穿过父子层次结构时,对象层次结构还是会列出它们。管理可映射层次结构的方法包括 shouldBeMapped()、getMappableParent() 和 getMappableChildren()。

使用规范的属性

某些情况下,底层的对象模型支持属性概念,例如,Java、HTML 和 .NET。Functional Tester 允许代理实现其他属性。如果代理直接实现属性,那么属性名称必须是其他模式,以避免和对象的其他属性混淆。 可能用于识别的常规属性名应该以一个点 (.) 开始。. 某些无法用于识别的框架可以使用某些管理属性,这些属性名以数字符号 (#) 开始。

调用对象方法

很多情况下,底层对象包含可以查找和调用的方法。框架和域实现通常直接管理这些方法,但 getMethod() 通常在域中的基本代理上实现。

使用良好定义的脚本方法

只要可能,即从类中执行鼠标操作回放。如果方法名称包含“click”或“drag”,那么鼠标事件执行操作。如果没有使用鼠标事件来实现操作,那么不要使用诸如“click”或“drag”此类的方法名称。如果键盘事件没有实现操作,那么请勿使用引用键或键盘的方法名称。使方法反映回放期间要执行的可靠操作。避免启发式引用。

管理 subitem

对象可以包含其他对象,并且包含的内部结构不能显示为嵌套对象或对象。例如,列表中可能包含项,但不能按照列表对象将项显示为对象本身。这种行为在基于 HWND 的对象中比较常见。处理 subitem 的最常用方法是 getSubitem() 和鼠标操作方法,例如 click()、drag() 和doubleClick()。getSubitem() 方法返回 null 或字符串。

如果不希望 subitem 中的对象显示为完整的对象,那么请使用以下任意一种策略:

异常和错误

实现异常和错误时请遵循以下这些规则:


反馈