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字段

最后更新于 6th Nov 2020