[python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景

Posted 51study

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景相关的知识,希望对你有一定的参考价值。

如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解

以如下图进行详细讲解(左边与右边的通过不同颜色进行圈起来,表示了这些控件的归属关系),例如红圈部分为一个父类,投影绿圈和黄圈均为它的子类(称为child),而绿圈和黄圈属于同级别关系,则可以理解为兄弟关系(称为sibling)

比如要点击“Navigation bar hide”的开关进行打开或者关闭,则代码为:

1 d(className = android.widget.LinearLayout).child_by_text(Adaptive brightness,className = android.widget.RelativeLayout).sibling(resourceId = android:id/switch_widget).click()

按照代码从左往右执行的顺序,先找到父类的className,这时你会发现在该界面界面有很多个这样的控件,没办法进行唯一认定,然后再寻找该父类中的子类className精确的进行定位菜单选项,会发现其它父类中的子类也全部是一样,也还是没有办法进行唯一认定,然后就再加上子类中的某一个标题(这个是唯一的),所以这就需要使用 .child_by_text  的方法来进行定位选项,找到该选项后要对该选项进行开关操作,又因为该 child_by_text的子类跟所要点击的开头控件是是兄弟关系,所以就可以通过 .sibling方法进行进一步的精确定位。

a、className = ‘android.widget.LinearLayout‘  :这个是父类
b、className = ‘android.widget.RelativeLayout‘ :这个是a步骤的子类,但跟d步骤同为兄弟关系
c、‘Adaptive brightness‘ :这个是b步骤的子类
d、resourceId = ‘android:id/switch_widget‘  这个是a步骤的子类,但跟b步骤同为兄弟关系

 

 

技术分享图片

 

总结:该代码使用场景是在Android某一个界面中(比如设置界面),里面有多个选项要进行开关操作,就需要用到该方法,不然你无法操作其它开关选项。

下面附上对该设置界面中两个开关进行操作的源码:

 1 #-*- coding:utf-8 -*-
 2 ‘‘‘
 3 Created on 2018年7月27日
 4 
 5 @author: any
 6 ‘‘‘
 7 from uiautomator import device as d
 8 while True:
 9     if d(className = android.widget.LinearLayout).child_by_text(Navigation bar hide,className = android.widget.RelativeLayout).sibling(resourceId = android:id/switch_widget):
10         d(className = android.widget.LinearLayout).child_by_text(Navigation bar hide,className = android.widget.RelativeLayout).sibling(resourceId = android:id/switch_widget).click()
11     else:
12         d(className = android.widget.LinearLayout).child_by_text(Navigation bar hide,className = android.widget.RelativeLayout).sibling(resourceId = android:id/switch_widget).click()
13     if d(className = android.widget.LinearLayout).child_by_text(Adaptive brightness,className = android.widget.RelativeLayout).sibling(resourceId = android:id/switch_widget):
14         d(className = android.widget.LinearLayout).child_by_text(Adaptive brightness,className = android.widget.RelativeLayout).sibling(className = android.widget.Switch).click()

 


以上是关于[python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景的主要内容,如果未能解决你的问题,请参考以下文章

安卓自动化测试,贺晓聪之uiautomator设备和选择器~Python详解

小白对uiautomator2的理解

如何使用和调试 android UIAutomator

Python + Android + Uiautomator自动化测试

python-UiAutomator学习&使用

uiautomator2简单用法