Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com
Different QTP: GUI元素库:用Screen-Field解决复杂组合元素
上一篇 /
下一篇 2012-08-26 22:17:59
/ 个人分类:QTP
GUI元素库:用Screen-Field解决复杂组合元素
有一些Client-Server模式的企业应用程序, 其GUI输入元素是非常复杂的, 不但一个Form里包含的输入元素多, 而且有很多组合类型。 比如下面的例子。(TODO:resource select window)
对于这种情况, 使用前面描述的CombinedElement方案并不合适。 从设计的角度, 这里有一个“代码复杂度”和“用户接口的简洁”的平衡问题。原因是CombinedElement和ElementQuery, FormInput是耦合的,是你中有我, 我中有你的状态。 如果是小型的, 少量的且重复使用率高的CombinedElement, 那么是合适的。 因为通过添加少量的代码就能把Combined
Element集成到一个统一的框架里, 提供给调用者一个统一的接口。 但是要集成大量且复杂的Combined Element, 那么结果就会是把GUI元素库代码搞得一团糟。
所以对于这种情况, 还是在GUI
Element库的外面开发一个专门的框架比较好。这就是将要介绍的Screen-Field方案。
首先看一下定义。
Field
Field是一个逻辑上的Input单元。 它可以是基本Input元素, 也可以是自定义的组合元素。
一个Field可以被一个且仅有一个标识符定位(
同基本Input元素一样)。
一个Field可以被设置值。 对于基本Input元素,框架会调用GUI_GetElement来定位该元素。 对于组合元素, 每一个Field类型有一个对应的设置值的方法, 如下
'@param objContainer a window that the field resides
'@param strMark a
string to identify a specific field
'@param strVal the
value to be set
GUI_Field_FieldName_Set(objContainer,
strMark, strVal)
Screen
Screen简单来说就是Field的集合。
每一个Screen都有一个名字, 还有一个对应的Screen配置文件, 以"screen"作为后缀名, 比如Login.screen。 Screen配置文件里定义了Field的类型。 比如
#in Login.screen
Login name=Edit
Password=Edit
%daylight savings%=On
Time zone=List
Screen支持SmartInput, 所以基本Elemen无需自定类型。碰巧上面的Login.screen里所有元素都是基本元素, 也就是说里面可以是空的。 但这个文件还是必须要的。
+-----------+ +------------+
| Screen | 1 1| xxx.screen |
| +---------->|------------|
+-----+-----+ | field=type |
1| | |
| | |
| | |
n| +------------+
+-----v-----+
| Field |
+-----------+
Screen的接口函数如下
GUI_Screen_Set(objContainer, screenName, strValueMap)
Screen-Field
library和 GUI element library的关系
|-----------------------|
|Screen-Field library |
|-----------------------|
|
|
|
|---------V---------|
|GUI Element Library|
|-------------------|
可见
Screen-Field library依赖于, 但不侵入GUI
element library。 所以无论有多少复杂的Field, 都不会丝毫影响到GUI
element library。
收藏
举报
TAG: