影刀 RPA 捕获元素之参照物定位:
如果要做群控机器人,多台手机运行相同机器人,此时,如果机器人要获取对应账号的昵称,每个人是不一样的,考虑到代码通用性,我们无法通过text属性精确匹配获取,该怎么办呢?
先来看个人介绍页面的xml结构(此处只截取部分代码):
以下红框部分就是昵称头像区域的xml代码和对应页面视图。
此时,昵称所在元素的属性class不是唯一的,resource_id是随机的字符串,也不稳定,text是我们要找的文本,也不是稳定的,无法精确匹配。
但是,我们发现,昵称下面的“小红书号”四个字是稳定的,且距离昵称是最近的,那么思路来啦:
我们可以根据这四个字快速定位到昵称下面的元素,然后通过该元素父元素的父元素,找到兄弟节点的第一个元素,就是昵称;
上面分析,用xpath代码表示就是:
```
//*[contains(@text,'小红书号')]/parent::*/parent::*/preceding-sibling::*[1]
```
代码解释:
//*[contains(@text,'小红书号')]:先匹配到包含“小红书号”所在元素,再通过该元素向上溯源,找到其父元素的父元素的前面的兄弟元素中的第一个元素;
/parent::*:获取所有父元素
preceding-sibling::*[1]:获取元素上面所有兄弟元素中第一个元素
总结:先快速找到目标元素最近的稳定元素,以此元素作为参照物,按照层级定位到目标元素