此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
一、前言
在自动化测试的实践中,我们发现许多同学在使用Poco框架进行控件定位时,对于节点之间的关系理解不够深入。那么本周让我们来详细讲解Poco框架中的child&children
、offspring
、sibling
和parent
等节点关系定位方法。
二、Poco定位节点的关系分析
2.1 child&children
从字面上看,可以很明显知道child
与children
表示的就是获取该节点下的子节点。如果是需要获取多个子节点,需要通过for去循环提取,不通过循环获取的话,默认都是提取第一个节点,但顺序编号从0开始。
其中child可以携带参数,可以获取指定的子节点,如:
1 | erlang复制代码poco("android.widget.FrameLayout").child("android.widget.LinearLayout") |
但children
是不能携带参数的,是可以直接获取所有的子节点,但可以根据返回的子节点顺序进行指定,默认返回的是提取的第一个节点(顺序编号从0开始)如:
1 | scss复制代码poco("android.widget.FrameLayout").children()[2] |
2.2 offspring
offspring
是获取该节点的子孙节点,若需要输出多个子孙节点,使用for
循环去进行输出,默认输出为首个子孙节点。在使用过程中,如果不清楚自己所需节点的编号为多少,我们可以选择用for
输出后,按照顺序编号进行选择使用。
1 | scss复制代码poco("com.netease.cloudmusic:id/bannerContainer").offspring() |
可以根据输出的顺序,结合下图,其中下述语句表达为“每日推荐”控件:
1 | scss复制代码poco("com.netease.cloudmusic:id/portal_rv").offspring()[10] |
也可以在offspring
括号内指定自己所需要的子孙节点,如:
1 | erlang复制代码poco("com.netease.cloudmusic:id/portal_rv").offspring("com.netease.cloudmusic:id/portalTitle") |
上述语句同样表示为“每日推荐”控件。这样有个好处就是,当有多个相同name的控件但存在不同name的上层节点时,可以很好的区分每个控件。
2.3 sibling
siblings
表示获取当前节点的兄弟节点,即与当前节点处于同一层级的其他节点。若需要输出多个兄弟节点,使用for
循环进行输出,默认输出为首个兄弟节点。
1 | scss复制代码poco("com.netease.cloudmusic:id/biFl").sibling() |
如下图,可以看到该节点下返回的兄弟节点与UI树相匹配:
同样,sibling
也是可以根据循环获取输出的顺序进行指定的,如:
1 | scss复制代码poco("com.netease.cloudmusic:id/biFl").sibling()[3] |
2.4 parent
在poco中,parent表示获取当前节点的父节点。如果需要获取整个节点集合的父节点,需要找到节点集合的第一个节点。 如果需要获取多层父节点,可以通过.parent()
方法进行逐级获取。
例如,对于一个节点A,它的父节点是B,B的父节点是C,那么可以通过A.parent().parent()
来获取到节点C。
1 | scss复制代码poco("com.android.systemui:id/status_bar_contents").parent() |
综上所述,如果需要获取该界面的所有节点,可以通过.parent()
或 .children()
等方法互相结合来获取其他层级中的所有节点,然后再通过遍历筛选出除了当前节点外的其他节点。
在开源群内,有一些同学也问过如何统计UI树某层或某控件的个数,我们可以通过上述的节点关系,结合python已有的len()函数,或使用for
循环累加的方式去获取的。如:
1 | scss复制代码#【利用子孙节点关系定位元素】统计输出热歌榜当前界面中歌曲数量 |
三、Android上的案例
了解完Poco节点关系的具体用法后,我们可以尝试在日常跑测中使用上节点关系,让我们来看一下在Android上的一个使用案例吧。
参考代码如下:
可以看到,我们通过节点关系可以获取到它的父节点、兄弟节点、子孙节点等,并可以对其进行点击、统计、输出信息等操作。
1 | scss复制代码# -*- encoding=utf8 -*- |
四、iOS上的案例
日常使用中可以发现,在iOS上获取对应的UI树控件比较困难,但是可以通过Poco节点关系的方法,更大程度地去寻找到自己想要获取的控件或ui树节点。
参考代码如下:
1 | scss复制代码# -*- encoding=utf8 -*- |
五、小结
本周我们介绍了Poco节点关系:
1、child&children
获取子节点
2、offspring
获取子孙节点
3、sibling
获取兄弟节点
4、parent
获取父节点
通过深入理解child&children
、offspring
、sibling
和parent
这些节点关系,我们能够更加精确和高效地定位到UI树中的各个节点。
如果同学们在使用Poco进行自动化测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在群里告诉我们或者提交issue,也欢迎大家投稿。后续我们会带来更多精彩的有关Poco专题内容,请大家持续关注我们,敬请期待哦!
AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b
官方答疑 Q 群:526033840
本文转载自: 掘金