[python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景
如何理解uiautomator里面的 child, child_by_text, sibling,我们借助android原生的uiautomatorviewer抓取的控件来进行理解
以如下图进行详细讲解(左边与右边的通过不同颜色进行圈起来,表示了这些控件的归属关系),例如红圈部分为一个父类,投影绿圈和黄圈均为它的子类(称为child),而绿圈和黄圈属于同级别关系,则可以理解为兄弟关系(称为sibling)
比如要点击“Navigation bar hide”的开关进行打开或者关闭,则代码为:
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某一个界面中(比如设置界面),里面有多个选项要进行开关操作,就需要用到该方法,不然你无法操作其它开关选项。
下面附上对该设置界面中两个开关进行操作的源码:
#-*- coding:utf- -*-
'''
Created on 2018年7月27日 @author: any
'''
from uiautomator import device as d
while True:
if d(className = 'android.widget.LinearLayout').child_by_text('Navigation bar hide',className = 'android.widget.RelativeLayout').sibling(resourceId = 'android:id/switch_widget'):
d(className = 'android.widget.LinearLayout').child_by_text('Navigation bar hide',className = 'android.widget.RelativeLayout').sibling(resourceId = 'android:id/switch_widget').click()
else:
d(className = 'android.widget.LinearLayout').child_by_text('Navigation bar hide',className = 'android.widget.RelativeLayout').sibling(resourceId = 'android:id/switch_widget').click()
if d(className = 'android.widget.LinearLayout').child_by_text('Adaptive brightness',className = 'android.widget.RelativeLayout').sibling(resourceId = 'android:id/switch_widget'):
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,及使用场景的更多相关文章
- [python]如何理解uiautomator里面的 right,left,up,down 及使用场景
关于Android自动化uiautomator 框架,前面有讲在有些场景下,比如需要在设置界面中将某些选项开关打开或者关闭(前提是这些选项和开关的控件(resourceId,className,tex ...
- [python]如何理解uiautomator里面的 instance 及使用场景
通过uiautomatorviewer打开之后,需要通过对某个控件进行操作,但在当前界面中该控件所有属性无法唯一(其它控件属性也是一样),这个时候就需要借助实例(instance)来进行区分,inst ...
- 深入理解js里面的this
闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...
- 友盟推送里面的Alias怎么用?可以理解成账号吗?
友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...
- drupal里面的ajax最粗浅的理解-流程
1, form里面的ajax所在地表单元素有一个事件,激发system/ajax,相应的有ajax_form_callback(), 会把被改变的元素值传到form_state[values]中, ...
- spring里面的ioc的理解?
spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...
- [python学习篇] uiautomator xiaocong
Skip to content This repository Pull requests Issues Marketplace Gist Sign out Watch103 ...
- 头文件里面的ifndef /define/endif的作用
c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...
- nopcommerce里面的@Html.Widget("home_page_top") 是什么?
很多朋友在修改模板的时候看到很多类似@Html.Widget("xxx")的东西,这里简单介绍一下流程: 比如@Html.Widget("home_page_top&qu ...
随机推荐
- C# WebAPI设置跨域
设置前端跨域请求很简单,只需要两个步骤 1.安装package Install-Package Microsoft.AspNet.WebApi.Cors 2.WebApiConfig类中,Regist ...
- Spring源码分析:非懒加载的单例Bean初始化过程(上)
上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finish ...
- ubuntu 上安装ssh
1. 执行 sudo apt-get update 2. 安装 sudo apt-get install openssh-server 3.查看ssh服务状态 sudo service ssh sta ...
- vue项目webpack打包后图片路径错误
首先项目是vue-cli搭建的,项目结构如下: 然后发现在css里写的图片引用地址在开发时正常显示,但在打包扔上服务器之后报错 报的是404,路径前面多了/static/css,不知道为啥. 在自己慢 ...
- 通过AOP自定义注解实现日志管理
前言: 通过自定义注解和AOP结合的方式,实现日志的记录功能 大致流程:项目运行->用户操作调用业务处理类->通过自定义的注解(我理解为一个切点)->进入到AOP切面类(在这里可以获 ...
- spring中获取ApplicationContext对象的技巧,含源码说明
第一步,实现接口ApplicationContextAware,重写setApplicationContext方法,下方代码标红的地方,绿色部分 可以通过声明来进行存储到本类中. @Component ...
- Connect the Cities(hdu3371)并查集(附测试数据)
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- JFinal -基于Java 语言的MVC极速 web 开发框架
JFinal概述 JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再 ...
- vue input输入框联想
以下是示例,样式可以自己修改.最后是效果图,其实也挺简单的,主要是用了watch监控input输入值的变化,如果数据是请后端请求可以,先请求数据. <template> <div c ...
- js-权威指南-Web套接字
HTTP是一种无状态的协议,,由客户端请求和服务端响应组成.HTTP实际上是比较特殊的网络协议. 大多数基于因特网的网络连接通常包含长连接和基于TCP套接字的双向消息交换.让不信任的客户端脚本访问底层 ...