查找界面元素
搜素符合指定条件的界面元素。界面元素是屏幕上可以看见的一些界面元素,如:按钮,菜单,文本框,下拉列表等等。 使用此功能可以准确定位某个界面元素的位置,然后完成“移动鼠标到对象上,或是点击对象,双击对象"等等。
可以使用此命令完成点击一个按钮、选择一个菜单、点击网页上的一个连接等等操作。和普通的鼠标命令不同,此命令不受窗口以及对象 (如按钮、连接、菜单项)变化的影响。只要搜素条件正确,它总在找到正确的位置。
- 查找对象还需要指定在哪个窗口下查找,请参见"定位某一个窗口"
- 使用此命令完成鼠标动作,请参见“在界面元素上执行鼠标动作”
命令选项
- 查找方法 指定查找对象所用的方法,可以是根据属性来查找,也可以根据界面元素的路径来查找。
-
对象类型 指定对象的类型。如果不知道,最好用工具抓取对象。
-
对象类别名必须为 指定对象的类别名作为搜素条件之一.
-
对象名称 指定对象的名称做为搜素条件。
-
对象内容 指定对象的名称做为搜素条件之一。
-
完全匹配 指定在搜索时是否要求完全匹配要查找的内容,如果不选这个选项,则只要查找的名称或是内容里面出现了要查找的内容就认为是查找成功。
-
对象位置必须为 指定对象在所属窗口中的位置。
-
顺序号必须为 当符合条件的对象有多个的情况下,指定想要的是第几个。可以使用此选项来顺序查找多个符合条件的对象.
使用路径方法查找界面元素
路径使用xpath的语法规范,是一种功能强大的查找方式,允许按界面元素的层次关系和过滤条件来定位某一个的界面元素。界面元素的层次关系是指界面元素之间的包含关系,一个界面元素中可以包含一个或多个子界面元素,子界面元素中还可以继续包括子窗口。路径查找方式就是通过指定层次关系来定位窗口,语法如下:
/界面元素的类别名1[过滤条件表达式][索引号] /界面元素的类别名1[过滤条件表达式][索引号]
每一个结点必须以/开始,后面紧跟类别名称。
- 多个结点 以点号分隔。左括号后紧接的是界面元素的类别名称。结点可以用通配符*,请参见例三。
- 过滤条件表达式 是可选的,如果有,必须以方括号括起来,并且在界面元素类别名后面。 过滤表达式中可以使用的属性请参见后面。多个过滤表达式也是允许的,类似于逻辑与的关系,如:[表达式1][表达式2],意思是元素首先要满足条件表达式1,然后还要满足表达式2,播放器会首先把满足条件表达式1的元素放在一起,然后再用表达式2去过滤。
- 索引号 也是可选的,如果有用方括号引起来放在类别名称或者是表达式后面,用于指定满足条件的第几个界面元素(注:界面元素的顺序号是由它在父界面元素中的前后顺序决定的),当有多个界面元素会满足条件的情况下有用。在XPath中,索引号是以1开始的,1表示第一个,2表示第二个,依次类似。
XPath的功能十分强大,更多的内容请参考XPath 教程。下面从简单到复杂给出了一些例子供参考。
例一:
/window/dialog/window[69]/push button
一个简单的界面元素路径。定位到一个窗口下的普通按钮。
例一:
/window/dialog/window[69]/push button[position()>3]
使用了XPath函数position()定位按钮顺序号大于3的按钮。
例三:
/window/dialog/window[69]/push button[name='增加']
带有条件过滤表达式的路径,按钮带有过滤条件,名称(属性名name)必须为“增加”,其中第三层中的/window[69]带有索引号,表示是第69个window。
例四:
/window/dialog/*/push button[name='增加']
带通配符和过滤表达式的界面元素路径。使用了通配符*表示这一层级上的任意类型,下面完全路径指向的元素都符合这个路径。
/window/dialog/window/push button[name='增加']
/window/dialog/pane/push button[name='增加']
/window/dialog/dialog/push button[name='增加']
例五:
/window/dialog//push button[name='增加']
使用了//,表示后面所有符合条件元素,并且不关心层级关系,如下例路径均符合这个条件:
/window/dialog/window/push button[name='增加']
/window/dialog/window/pane/push button[name='增加']
/window/dialog/pane/window/dialog/push button[name='增加']
例六:
(/window/dialog//push button[name='增加'])[2]
使用了括号进行分组,这一句的意思是符合条件的所有元素中的第二个。
(/window/dialog//push button[name='增加'])[last()]
这里使用了xpath函数last(),同时使用了括号进行分组,意思是匹配满足括号内条件的所有元素中的最后一个。
例七:
(/window/dialog//window[name='增加'])[/pane/text['名称'] and string() ct "必须"]
这是一个更复杂的例 子,使用了分组、条件、条件xpath表达式,还有xpath函数string()。播放器在处理表达式的时候,会先处理括号里面的表达式,找出所有符合条件的元素,然后再对这些元素依次判断两个条件(and运算):1、是否有子元素符合路径表达式/pane/text['名称'], 2、下面所有子元素中是否有包括“必须”的文字,如果两个条件都满足,则这个window元素就符合条件。
窗口路径中过滤表达式支持的窗口属性
在窗口过滤条件表达式中,可以使用的窗口属性如下:
属性名称 | 说明 | 数据类型 |
---|---|---|
name | 界面元素的名称。 | 文本 |
class | 界面元素的类别名。 | 文本 |
visible | 界面元素是否显示。 | 逻辑值 |
enabled | 界面元素是否允许。 | 逻辑值 |
value | 界面元素的值。 | 文本 |
desc | 界面元素的说明。 | 文本 |
inarea | 界面元素是否在父窗口的某一个区域内。语法格式:inarea="左坐标,上坐标,区域宽度,区域高度",如:inarea="10,10,400,300"。 | 文本 |
screenarea | 界面元素是否在屏幕的某个区域内。语法格式:screenarea="左坐标,上坐标,区域宽度,区域高度",如:inarea="10,10,400,300"。 | 文本 |
haschild | 界面元素是否有子界面元素。 | 逻辑值 |
checked | 界面元素是否被选中,仅适用某些类型的界面元素,比如复选框和单选按钮。 | 逻辑值 |
left | 界面元素在父窗口中的左坐标。 | 数字 |
top | 界面元素在父窗口中的上坐标。 | 数字 |
right | 界面元素在父窗口中的右坐标。 | 数字 |
bottom | 界面元素在父窗口中的下坐标。 | 数字 |
sleft | 界面元素在屏幕中的左坐标。 | 数字 |
stop | 界面元素在屏幕中的上坐标。 | 数字 |
sright | 界面元素在屏幕中的右坐标。 | 数字 |
sbottom | 界面元素在屏幕中的下坐标。 | 数字 |
width | 界面元素的宽度。 | 数字 |
height | 界面元素的高度。 | 数字 |
更多
- 注意:根据界面元素路径查找的时候,路径是交由目标应用程序内部处理的,有些应用程序出于某种原因不能从上到下的搜索,会导致抓取到的路径无法定位到真正的元素或是直接就找不到。遇到此情况只能放弃在此界面元素上使用路径方式定位。
- 尽可能使用"抓取工具"来得到界面元素的信息。抓取界面元素可以将鼠标在“抓取工具”处按下不要放开,然后将鼠标移到指定的对象(如按钮,菜单,下列框等等), 然后鼠标键即可自动得到对象的信息。对于一些无法使用“抓取工具”的场合(如菜单项),则可以使用“热键抓取”,即:按下“热键抓取”按钮进入 抓取状态,然后将鼠标移到相应的位置(或点开菜单,然后将鼠标移到想要的菜单项处),然后按钮抓取热键完成对象的抓取。