uipath--元素选取器

2,004 阅读3分钟

选取器

官方文档 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' />

这里的正则表达式和常见的没有什么区别