SilkTest点滴15 – tag和multitag

上一节我们介绍了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按钮。

Leave a comment

请输入正确的验证码