Poco节点关系大公开!
一、前言
child&children
、 offspring
、 sibling
和 parent
等节点关系定位方法。 二、Poco定位节点的关系分析
2.1 child&children
child
与 children
表示的就是获取该节点下的子节点。如果是需要获取多个子节点,需要通过for去循环提取,不通过循环获取的话,默认都是提取第一个节点,但顺序编号从0开始。 poco("android.widget.FrameLayout").child("android.widget.LinearLayout")
children
是不能携带参数的,是可以直接获取所有的子节点,但可以根据返回的子节点顺序进行指定,默认返回的是提取的第一个节点(顺序编号从0开始)如: poco("android.widget.FrameLayout").children()[2]
2.2 offspring
offspring
是获取该节点的子孙节点,若需要输出多个子孙节点,使用 for
循环去进行输出,默认输出为首个子孙节点。在使用过程中,如果不清楚自己所需节点的编号为多少,我们可以选择用 for
输出后,按照顺序编号进行选择使用。 poco("com.netease.cloudmusic:id/bannerContainer").offspring()
poco("com.netease.cloudmusic:id/portal_rv").offspring()[10]
offspring
括号内指定自己所需要的子孙节点,如: poco("com.netease.cloudmusic:id/portal_rv").offspring("com.netease.cloudmusic:id/portalTitle")
2.3 sibling
siblings
表示获取当前节点的兄弟节点,即与当前节点处于同一层级的其他节点。若需要输出多个兄弟节点,使用 for
循环进行输出,默认输出为首个兄弟节点。 poco("com.netease.cloudmusic:id/biFl").sibling()
sibling
也是可以根据循环获取输出的顺序进行指定的,如: poco("com.netease.cloudmusic:id/biFl").sibling()[3]
2.4 parent
.parent()
方法进行逐级获取。 A.parent().parent()
来获取到节点C。 poco("com.android.systemui:id/status_bar_contents").parent()
.parent()
或 .children()
等方法互相结合来获取其他层级中的所有节点,然后再通过遍历筛选出除了当前节点外的其他节点。在开源群内,有一些同学也问过如何统计UI树某层或某控件的个数,我们可以通过上述的节点关系,结合python已有的len()函数,或使用
for
循环累加的方式去获取的。如: #【利用子孙节点关系定位元素】统计输出热歌榜当前界面中歌曲数量
num=len(poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName"))
print("当前界面有{}首歌".format(num))
#【利用子节点关系定位元素】统计输出当前界面的热门节目单数量
num=0
for x in poco("CollectionView").child("UIA.Podcasts.ShelfItem.show"):
print(x.child().child().get_name())
num+=1
三、Android上的案例
# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
#打开网易云音乐
start_app("com.netease.cloudmusic")
sleep(7.0)
#【利用子孙节点关系寻找元素】通过输出子孙节点去查找“发现”按钮
for i in poco("com.netease.cloudmusic:id/bottomNav").offspring(nameMatches="com.*?desc"):
print(i.get_text())
#【利用子孙节点关系以及空间顺序定位元素】点击"发现"按钮
poco("com.netease.cloudmusic:id/bottomNav").offspring(nameMatches="com.*?desc")[1].click()
sleep(1.0)
#【通过兄弟节点关系定位元素】点击发现页中“精选”旁边的“排行榜”按键
poco("精选").sibling()[1].click()
sleep(1.0)
#点击热歌榜
poco(text="热歌榜").click()
#【利用子孙节点关系寻找元素】输出热歌榜中每首歌的名字
print("当前界面的热歌榜歌曲有:")
for i in poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName"):
print(i.get_text())
#【利用子孙节点关系定位元素】统计输出热歌榜当前界面中歌曲数量
num=len(poco("com.netease.cloudmusic:id/musicInfoList").offspring(nameMatches="com.*?songName"))
print("当前界面有{}首歌".format(num))
#【利用子节点关系定位元素】输出目前播放器在播放的歌曲名
print("下方为正在播放的歌曲:")
now_song = poco("com.netease.cloudmusic:id/minibar_song_container").child().children()
print(now_song.get_text())
四、iOS上的案例
# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.ios import iosPoco
poco = iosPoco()
#打开播客app
poco("播客").click()
#【利用子节点关系定位元素】输出该界面的信息,点击选择查看热门节目
for i in poco("CollectionView").child():
print(i.get_name())
#【利用子节点关系结合子孙节点关系定位元素】点击进入热门节目界面
poco("CollectionView").child("热门节目").offspring("查看全部").click()
#【利用子节点关系定位元素】输出当前界面的热门节目单
num=0
print("当前热门节目单有:")
for x in poco("CollectionView").child("UIA.Podcasts.ShelfItem.show"):
print(x.child().child().get_name())
num+=1
#【通过循环累计获取节点个数】输出当前界面的热门节目数量
print("当前界面有{}个节目".format(num))
#【利用父节点关系结合子节点关系定位元素】点击播放键进入播放界面
poco("MiniPlayerArtworkVisible").parent().child()[2].child()[0].click()
#【利用兄弟节点关系定位元素】点击播放键进行播放
poco("倒回,15秒钟").sibling()[1].click()
五、小结
child&children
获取子节点 offspring
获取子孙节点 sibling
获取兄弟节点 parent
获取父节点 child&children
、 offspring
、 sibling
和 parent
这些节点关系,我们能够更加精确和高效地定位到UI树中的各个节点。 本文分享自微信公众号 - AirtestProject(AirtestProject)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用户行为分析模型实践(四)—— 留存分析模型
作者:vivo 互联网大数据团队- Wu Yonggang、Li Xiong 本文是vivo互联网大数据团队《用户行为分析模型实践》系列文章第4篇 -留存分析模型。 本文详细介绍了留存分析模型的概念及基本原理,并阐述了其在产品中具体实现。针对在实际使用过程问题,探索了基于ClickHouse留存分析模型实践方案。 一、背景需求 根据CNNIC的统计数据显示,中国互联网用户已达10.79亿人,互联网普及率达到79.4%。互联网虽然仍然在快速增长,但是用户规模逐渐饱和,互联网事实上已经进入了存量用户时代,整体的流量竞争也越来越激烈,用户的留存的重要性也越来越高于拉新。因此,如何识别忠实用户,了解目标用户群的留存表现?如何分析用户流失情况,优化产品?如何分析目标用户是否完成了期望的行为等等就是我们数据分析的重要课题,而留存分析模型就是我们解决这些问题的重要工具。 二、概述 2.1 概念介绍 留存分析模型主要用于分析触发了起始事件的用户在后续时间周期内触发了后续事件(即回访事件)的比率,该模型可以较好的反映出用户的忠实度或者说是用户的粘性。对于留存分析模型有几个重要的概念要了解: 留存分析一般...
- 下一篇
上架即封神!3.6k Star 的开源游戏模拟器,Delta 冲上 App Store 免费榜
一直以来,苹果设备的应用商店(App Store)都是禁止游戏模拟器上架,所以 iPhone/iPad 用户不能直接安装 GBA、红白机之类的模拟器应用,这也让想在 iPhone 上重温童年游戏机的机友们,十分羡慕 Android 用户。 现在,**iPhone/iPad 用户终于可以光明正大地在国服「App Store」下载游戏机模拟器了!**因为,苹果公司在 4 月初对《应用商店审核指南》第 4.7 条款的修改,一举推翻了苹果设备禁止安装游戏机模拟器的规定。 4.7 迷你 App、迷你游戏、流媒体游戏、聊天机器人、插件和游戏仿真器 App 中可以提供未嵌入二进制文件的某些软件,尤其是 HTML5 迷你 App 和迷你游戏、流媒体游戏、聊天机器人以及插件。此外,古游戏主机仿真器 App 可以提供游戏下载服务。 这一改动生效后,有一批游戏机模拟器已成功上架「App Store」,其中引爆这一个消息的是一款名为「Delta」的任天堂复古游戏机模拟器,上架不到 12 小时,直接登顶 iOS 应用商店免费榜第一! 作为一个 90 后,FC、GBA...游戏机就是我的童年回忆。所以我第一时间就...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程