上一节我们介绍了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按钮。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/