SilkTest点滴14 – Tag和Multitag

Tag:tag是对象的实际名称,它和indentifier不同,indentifier是对象的逻辑名。SilkTest使用tag在记录和执行testcase的过程中识别待测应用程序中的对象。Testcase从来不会使用tag来引用一个对象,它们通常使用indentifier来引用对象。这下面列出的是各种tag类型。
Caption:是对象显示给用户的标题或者Label。
Prior text:离对象最近的左边或者是上边的static text中的内容。Prior text tag使用^字符开头。
Index:在父对象中所有相同类型对象中出现的顺序(从左上到右下排序)。Index tag必须以#字符开头。
Window ID:是对象的GUI内部ID。Window ID tag必须以$字符开头。
Location:对象的物理位置(坐标)。Location tag必须以@字符开头。
Attributes:是Html对象的属性名。如果你一个对象不是Html对象,将不会记录任何信息。
注意:并非所有的对象都有所有的tag。比如对话框,并没有Window ID。所以它们也没有window ID tag。
下面是一个Check Box可能的tag值情况。
Tag type
Value
Comment
Caption
Case sensitive
Prior text
^Find What:
“Find What” is the nearest static text above or to the left of the check box
Index
#1
The Case Sensitive check box is the first check box in the dialog
Window ID
$1041
Location
@(57,65)
Attributes
[blank]
Attributes are only recorded for Html objects.
Multitag:一般情况下你如果禁用了multiple tag 进行记录的功能(Options->Recorder->Recorder multiple tags),Agent将使用tag来在运行时唯一标识对象。如果你没有禁用multiple tags功能,那么当你记录window声明的时候,Agent将会为对象生成multitag。
其实tag声明语句在功能上是等价于multitag声明语句的。它都可以使用一个或者多个tag用来为Agent识别对象服务。唯一的不同是语法上的:在tag语句中,所有的tag在同一个字符串中并且用管道符号(|)来分割,例如:
tag “Case sensitive|$1041″。
而multitag语句,不同类型的tag都有自己的行,例如:
multitag “Case sensitive”
          “$1041”
        默认情况下,当你产生一个window 声明的时候,Agent根据对象的Caption(如果对象有的话)和Window ID(如果对象有的话)来产生tag。例如一个Case Sensitive check box(通常出现在查找对话框中)的默认tag为:
CheckBox CaseSensitive
          multitag “Case sensitive”
          “$1041”
我们可以看出,Case sensitive是它的caption,$1041是它的Window ID。
你可以指定任意多的tag字符串,只要你愿意。你也可以为某种tag类型指定多个tag值。例如,如果一个控件的标题会动态改变的话,你可能希望在tag中指定所有可能的标题。就像下面这样:
PushButton Confirm
          multitag “Yes”
          “OK”
如果某个pushbutton有以上的tag的话,Agent就会将它识别出来。
那么如何选择tag字符串的形式呢?
其实使用caption作为tag是最具有可移植性的一种选择,与WindowID一起合用是agent用来建立tag的做常用方法。
Agent会自动创建有效,唯一的tag。然而,在一些情况下你需要编辑tag,下面的表格描述了在特定情形下需要使用的tag形式。
情形
使用的tag形式
GUI对象的Label包含了动态文本。例如对话框中第三个文本字串是一个路径c:/myapp
使用index,例如:“#3”
注意:避免为那些MoveableWin类使用index tag。因为这样可能在那些多窗口的情况下选择了一个随机的窗口。
GUI对象的父亲会在运行时变化。例如,打开的对话框可能在运行时有一个或者多个父亲应用。
指定该对象的父亲是当前激活的应用。例如:
“~ActiveApp/[DialogBox]Open”
你需要在运行时设置动态设置tag
用一个函数调用代替tag值。例如,CreateTag是一个用户定义的函数用来返回一个字符串:
MenuItem CheckBox        tag CreateTag(this)       ?STRING CreateTag (WINDOW wWindowIdentifier)               switch (wWindowIdentifier)                case TestApp.Control.CheckBox                 return “Check box|$200”
两个对话框拥有同样的Label或者caption。但是没有相同的内容。例如,一个open对话框有一个Name文本域,另外一个open对话框有一个Search的按钮。
为每个tag指定一个唯一的孩子。你可以为孩子使用任何明确的tag形式,但是不要使用window indentifier。例如:
“[DialogBox]Open/[TextField]First Name/..”       “[DialogBox]Open/[PushButton]New Search/..”       “[DialogBox]Open/[ComboBox] #2/..”       [BrowserChild]ThePage/[BrowserChild]One of several frames with the same caption/[HtmlHeading]Unique heading/..”
浏览器frame的tag。(BrowserChild有”one of several frames with the same caption”的caption)
“[BrowserChild]ThePage/[BrowserChild]One of several frames with the same /[HtmlHeading]Unique heading/../..”
浏览器页的tag (BrowserChild 有”ThePage”的caption)

GUI对象没有Label和caption,并且它的位置(因此包括Index)会在运行时动态变化
使用window Id

GUI对象有Label或者是caption,但是你不准备用它们作为tag,因为它们会变化。
可以使用index或者是prior text
你希望国际化你的应用程序。
使用window ID或者用变量代替你的tag
GUI对象是一个图形化的控件,就像一个工具条。
使用location
当你的程序启动的时候你想唤起一个对话框,而不是主窗口。例如,你想一个名叫Login的对话框。
将对话框的类从DialogBox改成MainWin,然后在tag里面指定它的真实类,例如:
“[DialogBox]Login”
在某个时间,超过一个的window实例显示
使用实例语法,它的形式为:tag-string[n],其中你代表实例。[1]表示在桌面上离顶端最近的窗口实例,[2]表示第二高的,以此类推。

Leave a comment

请输入正确的验证码