参考: https://www.uipath.com/kb-articles/return-all-elements-of-a-table-using-find-all-children-activity
找了很久的资料才知道控件的用法.
需求
需求是在列表页循环点击每行的一个详情按钮判断里面的内容, 并做对应的处理. 但是第一步的循环点击就难住了. 下面给出解决方案.
解决
使用 UiPath.Core.Activities.FindChildren
这个控件.
在 属性->目标->选取器
(语言我用的中文) 里面写类似下列的规则, 复制XPath
和快速替换可以看我这篇(VSCode对中括号做匹配替换):
"<webctrl css-selector='body>div>div>div>table' tag='TABLE' />"
说明: 其中 css-selector
相当于网页元素的 xpath
, 即该元素在网页结构中的路径. 注意连接符用 >
这里找到 table
.
然后在 筛选
里, 使用下列规则筛选出自己要的元素集合. 我这里要点击的那个详情按钮是 a
标签, 所以这样筛选.
"<webctrl tag='A'/>"
最后在 作用域
那里选择: FIND_DESCENDANTS
这个选项. 在输出指定一个 System.Collections.Generic.IEnumerable<UIPath.Core.UIElement>
类型的变量赋值. 这样就找到了想要的所有元素了.
之后做遍历循环如下:
使用控件为: UiPath.Core.Activities.ForEach
.
在 属性->TypeArgument
里设置每个遍历的 item
为 UIPath.Core.UIElement
类型. 在输入值那里填入上一步赋值的元素集合变量. 这样就可以遍历得到每一个元素了.
最后做点击事件的步骤如下:
首先获取元素的特征, 例如在我的需求里, 网页上每一行的详情按钮元素中有一个重要的区分属性是: trade_id
, 因此我用分配控件单独提取出每个元素的 trade_id
.
trade_id = Convert.ToString(item.Get("trade_id"))
然后使用单击控件, 用 属性->目标->选取器
下面的规则:
"<webctrl aaname='详情' tag='A' css-selector='body>div>div>div>table>tbody>tr>td>a' trade_id='" + trade_id + "'/>"
说明: 同样在 css-selector
中指点这个详情按钮的 xpath
(在网页结构中的位置), 然后拼接 trade_id
, 注意是用双引号把两个字符串拼接在一起.
这样做就解决这个需求了.
应小伙伴要求, 写了简单的例子, 已上传到 gitee, 下载 loop_click.xaml 这个文件放到 UIPath Studio 打开的项目路径里即可, 打开后参照我上面的描述理解
仓库位置 :
https://github.com/sancheo/UIPathExamples
https://gitee.com/geekqian/uipath_simple
拓展:
在打开的新标签页操作请看这篇文章: https://blog.csdn.net/geekqian/article/details/119149744