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]表示第二高的,以此類推。
|
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/