• [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()
  • 相关阅读:
    android自定义通知栏遇到的问题
    写博客号的初衷
    模型转换遇关键字
    界面传值的四种方式
    button循环添加事件
    解析数据的步骤
    数组排序 (数组是有序容器,因此集合中只有数组才能排序。)
    集合遍历
    自定义view和自定义cell
    cell自适应高度
  • 原文地址:https://www.cnblogs.com/aziji/p/9379030.html
Copyright © 2020-2023  润新知