上一节我们介绍了tag和multitag的概述和它们二者之间的差别,以及在某些特殊情况下选择tag的方法。这一节将介绍tag和multitag的其他方面的知识。
在tag中,我们会经常用到以下的一些句法元素,它们可以使我们指定tag时更加灵活方便。
我们还可以在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中的第一个节,而忽略剩下的节。不过,如果你在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按钮。
|