上一節我們介紹了tag和multitag的概述和它們二者之間的差別,以及在某些特殊情況下選擇tag的方法。這一節將介紹tag和multitag的其他方面的知識。
在tag中,我們會經常用到以下的一些句法元素,它們可以使我們指定tag時更加靈活方便。
句法元素 |
用處 |
/ |
分割雙親和孩子對象 |
[ ] |
為類或者是GUI對象實例定界 |
.. |
指定Agent將在tag中使用子對象的雙親 |
~ActiveApp |
指定一個對象的上級雙親當前處于激活態對象。(不要在silktestBean將使用的任何window的聲明中使用~ActiveApp) |
* |
在一個main window的caption里面代表動態字符串(例如,文件名) |
| |
分割多重tag的不同節 |
~ |
強迫silktest去檢查一個多重tag的下一級。用來關聯|元素。沒有~的時候,silktest僅僅評估multitag中的第一節內容。 |
我們還可以在GUI對象的tag字符串中使用雙親標識符,并且用/進行分割,例如:
multitag "parent/tag1"
"tag2"
這種表示法與
multitag "parent/tag1"
"parent/tag2"
的作用相同,所以你不用為每個tag都指定一次parent,不過需要注意的是如果你指定了多個tag的雙親標識符,它們必須保持一致,否則將會報錯。
和上節提到的一樣,你可以使用管道符號|來分割多個tag節,例如
tag "Case sensitive|$1041"等價于
multitag "Case sensitive"
"$1041"
這樣在你有多個tag節的時候,使用|管道符號可以使你的tag更加易讀。
那么在運行時,多重tag是如何被決斷的呢?
在運行時,Agent會從左到右來評估每個tag節,直到它找到一個唯一匹配的。當決斷tag時如果出現了一個錯誤的話,silktest將會拋出一個一場,并且進程將被停止-除非該錯誤是Window Not Found或者是Window Not Unique(在這兩種情形下,Agent將會繼續評估其他的tag節)。下面是一些例子:
Tag |
運行時會發生的情況 |
“#xyz|MyWin” |
一個語法錯誤結果,因為#xyz是不合法的tag。所以MyWin將永遠不被評估 |
“Yes|OK” |
如果Yes和OK都存在并且唯一的話,Yes會被使用 |
“Yes|OK” |
如果只有OK存在,OK將被使用 |
“Yes|OK” |
如果Yes和OK都存在,但是Yes不唯一的話,OK將被使用 |
注意:默認情況下,管道符號|只檢查tag中的第一個節,而忽略剩下的節。不過,如果你在GUI對象前面放一個tag符號~,silktest的tag決斷機制被強迫檢查第一個和其后的節,這在一個對象擁有多個雙親的情形下很有用處。
例如,假設你在表格中間有一個鏈接,但是這個鏈接可能出現在列1和列2中。
1. 如果你的tag管道符像下面這樣使用:
[HtmlTable]#1/[HtmlColumn]Column 1|Column 2/[HtmlLink]Click Here
那么silktest會查找[HtmlColumn]Column 1,找到它,然后在這列中查找HtmlLink,如果該鏈接在其他任何一列,silktest都不會找到,因為它將不會在[HtmlColumn]Column 1以外進行查找。你會得到一個Window Not Found的錯誤。
2. 然而,如果你的tag管道符號像下面這樣使用:
[HtmlTable]#1/~/[HtmlColumn]Column 1|Column 2/[HtmlLink]Click Here
那么silktest將會查找每一個列,直到它找到該鏈接。
最后,再介紹一下全完全window tag句法,該句法用來明確地唯一識別一個GUI對象,它由該對象的tag以及它的所有祖先的tag串接而成,這樣Agent就可以用它來區分一個對話框中OK按鈕和另一個對話框中的OK按鈕。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/