UiBot元素选择器说明
上图是UiBot元素选择器的一个典型格式,关于选择器的组成,一般分为如下几个部分:
wnd
数组格式,代表窗口层级,查找时会从上到下一直缩小到目标元素所在的窗口一级,其中每个数组的item一般包含如下属性:
- app 应用进程名
- cls 窗口类名
- title 窗口名
- aaname 窗口别名 IAccessible字段
- ctrlname 控件名称IAccessible字段
- ctrlid 控件id
wnd是任何元素都会存在的,对应windows的窗口,每一个有唯一句柄HWND。
wnd下根据不同的类型的应用元素会有:
ctrl(windows控件)
ctrl结构与wnd结构类似,每一级代表一个控件,指示控件层级的从属关系,主要使用MSAA和UIAutomation技术,通常包含如下属性:
- role 控件类型,IAccessible字段
- name[控件名称]
- aid automationid,IAccessible/UIAutomation字段
- text 文本
- cid 控件类型id,UIAutomation字段
html(网页元素)
html主要使用dom介入的技术,IE通过IHTML系列接口,Chrome和Firefox通过插件,通常包含如下属性:
tag[标签名]
id[元素Id属性]
parentid[父元素Id属性]
name[input元素name属性]
aname[多数情况下表示元素可视的文本]
css-selector[css选择器,找不到其他定位方式时会启用]
- tag 元素标签名
- id 元素id属性
- name input元素name属性
- type input元素name属性
- parenteid 父/祖先元素id属性
- parentname 父/祖先元素name属性
- aaname 多数情况下表示元素可视的文本
- isleaf 是否为叶子节点
- css-selector css选择器,找不到其他定位方式时会启用
- tabindex table元素序号
- tableRow 表格行号
- tableCol 表格列号
- href href属性
- src src属性
- url 所在页面url
- title 所在页面标题
- htmlwindowname 浏览器窗口名
- cookie cookie
- readystate dom状态
- innertext
- outertext
- innerhtml
- outerhtml
- aastate
java(java应用控件)
java的结构也是层次结构,使用java的accessible技术,指示控件层级的从属关系,通常包含如下属性:
- role 控件类型
- text 文本
…
sap(sap应用控件)
sap的结构来自sap script,id是一个能够唯一表示一个sap元素的字符串
- id
*号是通配符,用于模糊查找,wnd、ctrl、html中的字符串属性大多数都可以支持通配符
support目录可以配置选择元素时使用的选择器框架策略
其中目录对应相应的框架,如sap的配置文件config.json如下:
{
"mod_description":"sap支持",
"mod_lang":"dotnet",
"mod_filename":"UiBotSap.dll",
"key_classes":["SAP_FRONTEND_SESSION"],
"mixed_mode_classes":["#32770"],
"process_filter":"saplogon",
"selector_field":"sap",
"on_off":1
}
on_off为0表示关闭框架的支持,关闭后将使用默认的WIN32元素查找,1表示开启;
key_classes表示针对这一组窗口类名匹配启用;
process_filter表示针对进程名匹配,以逗号分隔,key_classes和process_filter同时匹配才会启用支持;
mixed_mode_classes表示例外情况需要使用WIN32元素查找,比如文件打开对话框窗口和其他不适用框架的情况;
其他字段为uibot内部使用,不要随意改动。
还有一个比较特殊的配置文件uia.json,用来配置需要启用uia支持的窗口(我们默认使用的是msaa),有时候默认的msaa桌面元素不够精确时可以把窗口类名¹ 加入这个文件。
IE浏览器元素选择技巧
IE浏览器里没有css-selector工具,当自动生成的元素选择器不理想时往往一筹莫展,这时我们可以尝试以下一些技巧:
修改dom
选择器中含有动态id时,打开IE浏览器F12窗口,通过检查元素定位到元素所在的dom标签,在浏览器F12窗口把动态id属性置空或者删除,重新用UiBot选择元素生成新的选择器,这个技巧也同样适用于其它浏览器。
UI分析器
打开UI分析器的属性栏会看到其它一些未在选择器显示的属性,这些属性也可以用来辅助定位。
文本操作
IE浏览器的文本命令是比较稳定、精准的,元素命令无法定位时可以试试文本命令(选择一个较大的元素/区域)。
①窗口类名,WIN32窗口注册的Class,对应选择器的cls字段