选取器
官方文档 docs.uipath.com/zh-CN/studi…
UI自动化,需要与浏览器各种窗口、按钮、下拉列表以及许多其他元素交互。uipath可以通过页面抓取识别页面元素,但页面有时不是一成不变,而是有诸多变化,我们需要通过一些手段来修改编辑添加uipath的selector。
selector以XML 片段的形式存储元素及其父元素的属性。具有以下结构 <node_1/><node_2/>...<node_N/>
最后一个节点表示您感兴趣的图形用户界面元素,而前面的所有节点都表示该元素的父元素。<node_1> 通常称为根节点,表示应用程序的顶部窗口。
每个节点都有一个或多个属性,可以帮助您正确识别所选应用程序的特定级别。
每个节点的格式如下:
<ui_system attr_name_1='attr_value_1' ... attr_name_N='attr_value_N'/>
怎么手动编辑选取器,根据具体场景
像selenium 元素定位一样, 当因为页面,版本等原因,元素不唯一,xpath, css支持模糊匹配, uipath的selector也一样有相关灵活用法,介绍几个常用的
通配符
您能够替换字符串中的零个或多个字符。 在处理选取器中动态变化的属性时,通配符非常有用。
- 星号 (*) – 替换零个或更多个字符
- 问号 (?) – 替换单个字符
- 星号和问号 (*?) - 匹配包含至少一个字符的属性值通配符的选取器
例子
<html app='chrome.exe' /><webctrl id='id*' tag='TABLE' />
<webctrl id='id*' tableRow='1' tag='DIV' />
动态选择器,变量替换
动态选取器使用变量或参数作为目标标签属性的特性。如此一来,选取器便可根据变量或参数的值而非具体字符串轻松识别目标元素,毕竟字符串可能会根据自动化项目中的交互情况发生变化。因此,您可以通过更改变量或参数与不同元素交互,而无需更改选取器本身。
动态选取器格式:
- 标签 - 目标标签,例如
<ctrl/> - 属性 - 目标属性,例如
name='menuItem' - {{Value}} - 变量或参数的名称,用于保存要与之交互的元素的属性。
<tag attribute='{{Value}}' />
例子 定义了一个变量search_keyword
<webctrl type='' tag='MARK' class='text__highlight' aaname='{{search_keyword}}' check:innerText='{{search_keyword}}' />
模糊
使用选取器的模糊搜索功能,根据输入的模式而非精确匹配项来查找字符串。如此一来,即使某些值在自动化流程中容易改变,您也可使用更灵活的方法识别元素,并根据多个属性验证选取器。
模糊搜索的工作方式
为了使用模糊搜索功能,您需在目标选取器的顶层标签中加入两个匹配选项,如下所示:
| 选项 | 描述 |
|---|---|
matching:<tag_name>=fuzzy | 用于指定目标搜索标签,具体取决于 <tag_name> 值。 |
fuzzyLevel:<tag_name>=<numerical_value> | 确定目标 <tag_name> 的匹配阈值。此选项支持 0 到 1 之间的数值,如下所示:- 更趋近 0 - 返回的结果与 <tag_name> 的相似度较低,更趋近 1 - 返回的结果与 <tag_name> 的相似度较高 |
例子
<html app='firefox.exe' title='WEScho0ls Online Web Tutorials'
matching:title='fuzzy' fuzzylevel:title='0.8' />
正则表达式
正则表达式 (RegEx) 是一种特殊的文本字符串,用于描述搜索模式。这使其极适用于搜索、文本处理和数据验证。在选取器中使用正则表达式搜索功能后,仅执行一次搜索即可识别多个目标元素
为了使用正则表达式搜索功能,您需在要识别的元素的标签中加入一个匹配选项,如下所示:
| 选项 | 描述 |
|---|---|
匹配项:<tag_name>='regex' | 用于指定目标搜索标签,具体取决于 <tag_name> 值。 |
<tag_name>='<regex_command>' | 允许您通过用于识别 <tag_name> 的 <regex_command> 表达式指定搜索模式。 |
例子
matching:name='regex' 属性指示选取器使用正则表达式识别 <name> 标签,而 <name='Display is \d'> 命令则会返回所识别 <name> 标签的所有数值
<uia automationid='CalculatorResults' name='Display is \d' role='text' matching:name='regex' />
这里的正则表达式和常见的没有什么区别