1.UI对象识别器Selector

用法d(text='Clock', className='android.widget.TextView')

支持以下参数,详细信息可参考UiSelector Java doc

text, textContains, textMatches, textStartsWith
className, classNameMatches
description, descriptionContains, descriptionMatches, descriptionStartsWith
checkable, checked, clickable, longClickable
scrollable, enabled,focusable, focused, selected
packageName, packageNameMatches
resourceId, resourceIdMatches
index, instance

#点击: 设置→个性主题 :

方法一:

d(description='设置', className='android.widget.ImageView').click()

d(text='个性主题', className='android.widget.TextView').click()

方法二:

d(resourceId="com.miui.home:id/icon_title", text="设置").click()

d.xpath('//*[@text="个性主题"]').click()

2.获取UI对象状态及信息

d(text="3D_H5").exists

d.exists(text="3D_H5")

d(text="3D_H5").info

#获取/设置/清空编辑框内容

d(description="请输入QQ号码或手机或邮箱").get_text()

d(description="请输入QQ号码或手机或邮箱").set_text("1234")

d(description="请输入QQ号码或手机或邮箱").clear_text()

#获取控件中心位置坐标

x,y=d(text="设置").center()

#x,y = d(text="设置").center(offset=(0, 0)) # left-top x, y

#在UI选中对象上执行点击事件

d(text="设置").click(timeout=30)#最多延迟等待30秒,没找到该元素会抛出.UiObjectNotFoundError

d(text="设置").click(offset=(0.5, 0.5)) #百分比表示方法 默认点击中心坐标

d(text="设置").click(offset=(0, 0)) #点击坐标 左-上

d(text="设置").click(offset=(1, 1)) #点击坐标 右-下

d(text="设置").click_gone(maxretry=3, interval=1)#重复点击此元素3次,每次间隔1秒,若该元素消失则中止偿试并返回bool值

d(text="设置").long_click(timeout=3)#长按指定元素对象3秒

3.针对特定对象的手势动作

#在xx秒内拖动指定对象到指定坐标点(或指定对象位置)

d(text="设置").drag_to(500, 500, duration=0.1)

d(text="设置").drag_to(text="安全中心", duration=0.2)

#从UI对象的中心位置开始移动到它的边缘

支持4个方向:left,right,top,down

使用方法:d(text="设置").swipe("up",steps=100)#1 steps大约5ms,10 steps大约0.5秒,是一个按下→移动→弹起的过程。试了一下:steps太短上/上滑动等于单击,左/右移动等于快速滑动

#等待指定的对象出现,并返回bool值

d(text="设置").wait(timeout=3)#3秒内”设置“对象出现返回true,否则返回false

#等待指定的对象消失,并返回bool值

d(text="设置").wait(timeout=3)#3秒内”设置“对象消失”返回true,否则返回false

这个有两种情况1.如果当前界面无此对象,则直接返回false;2.如果当前界面有此对象,3内消失(最长等待3秒)返回true;否则返回false

#界面飞轮操作(就是按住滑一下,类似 鼠标滚轮滑动一次的行/列数)

#垂直滚动:

d(scrollable=True).fling()#默认垂直滚动条.vert可省略 为了可读性可加上,向下滚动

d(scrollable=True).fling.toEnd() 或 d(scrollable=True).fling.vert.toEnd()#垂直滑动:滑到最底部

d(scrollable=True).fling.toBeginning() 或 d(scrollable=True).fling.vert.toBeginning()#垂直滑动:滑到顶部

d(scrollable=True).fling.vert.forward()#垂直向上滑动

d(scrollable=True).fling.vert.backward()#t垂直向下滑动

#水平滚动(比如打开网页baidu,会在顶部的各个分类页签上切换):

d(scrollable=True).fling.horiz.toBeginning()#向左滑动

d(scrollable=True).fling.horiz.toEnd()#向右滑动

d(scrollable=True).fling.horiz.forward()#向左滑动

d(scrollable=True).fling.horiz.backward(max_swipes=1000)#向右滑动

#scroll滚动条操作

d(scrollable=True).scroll(steps=10)#默认垂直,向上滑动

d(scrollable=True).scroll.horiz.forward(steps=100)#向右滑动,1 steps约20ms

d(scrollable=True).scroll.vert.backward()#垂直:向下滑动

d(scrollable=True).scroll.horiz.toBeginning(steps=100, max_swipes=1000)#水平,向左滑动

d(scrollable=True).scroll.toEnd()#垂直:向下滑动到底部

#滚动直到指定的对象页面出现为止

d(scrollable=True).scroll.to(text="琅琊榜")#垂直的挺准

d(scrollable=True).scroll.horiz.to(text="琅琊榜")#这个水平的没搞明白……感觉不准确

4.监视器Watcher

#测试机为华为P7-安卓7.0

import uiautomator2 as u2
serialno = 'KWG5T16603013752'
apk = 'http://ip/test/eg.apk'
d = u2.connect_usb(serialno)
d.implicitly_wait(10.0)
d.watcher("ok").when(text="仅允许本次安装").click()#创建监视器
d.watcher("ins").when(text="安装").click()#创建监视器
d.watchers.watched=True#启动监视器
d.app_install(apk)#安装app
print("all watchers:",d.watchers,d.watchers.triggered)#打印所有监视器
d.watchers.reset()#重置监视器
print("reset watchers:",d.watchers.triggered)
d.watchers.remove("ins")#移除指定监视器
print("reomve_ins.watcher",d.watchers)
d.watchers.remove()#移除所有监视器
print("remove_all.watcher",d.watchers)

5.使用adb广播输入消息

d(text="备忘录", className="android.widget.TextView").click()
d(text="新建", className="android.widget.TextView").click()
d.set_fastinput_ime(True) # 切换成FastInputIME输入法
d.send_keys("你好hello") # adb广播输入
d.clear_text() # 清除输入框所有内容
d.set_fastinput_ime(False) # 切换成正常的输入法
d.send_action("search") # 模拟输入法的搜索

send_action 说明
该函数可以使用的参数有 go search send next done previous

6.Toast显示和Xpath识别对象

参考文章:UI2-xpath扩展,W3CSchoolXpath,xpath路径表达式,xpath快捷管理,xpath高级用法

# -*- coding: utf-8 -*-
import uiautomator2 as u2
serialno = '7f3dec60' # device adb serial
d = u2.connect_usb(serialno)

#比如操作微信底部按钮菜单,RelativeLayout[1]微信,[2]通讯录,[3]发现,[4]我
sl=d.xpath('//*[@resource-id="com.tencent.mm:id/bq"]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[3]').get()#
x,y=sl.center()
d.long_click(x,y)
'''
sl=d.xpath('//*[@resource-id="com.tencent.mm:id/li"]')#操作搜索框
print(sl.exists,sl.get_last_match(),sl.get_text())
sl.set_text("hello world")#搜索框发送内容

if d(text="文章", className="android.widget.TextView").exists():#Selector搜索文本
print("Got it-1 article")
if d(resourceId="com.tencent.mm:id/c2t", className="android.widget.TextView").exists():#搜索id
print("Got it-2 article")

if d.xpath('//*[@text="文章"]').exists:
print("Got it-3 article")
if d.xpath('//*[@resource-id="com.tencent.mm:id/c2t"]').exists:
print("Got it-4 article")

if d(resourceId="com.tencent.mm:id/c2t", text="文章").exists():
print("Got it-5 article")
if d(resourceId="com.tencent.mm:id/c2t", text="音乐").exists():
print("Got it-6 music")
'''

#Toast消息显示

#d.toast.show("Hello world")
d.toast.show("Hello world", 1.0) # show for 1.0s, default 1.0s
#下边的get方法报错了
#d.toast.get_message(5.0, 10.0, "default message")
#assert "Short message" in d.toast.get_message(5.0, default="")
# clear cached toast
#d.toast.reset()
# Now d.toast.get_message(0) is None

UIAutomator2的API文档(三)的更多相关文章

  1. UIAutomator2的API文档(一)

    检查并维持设备端守护进程处于运行状态,应该是重启了atx守护进程:d.healthcheck() 1.隐式等待 import uiautomator2 as u2serialno = '7f3dec6 ...

  2. UIAutomator2的API文档(二)

    1.设备屏幕事件 熄灭屏幕d.screen_off() 唤醒屏幕d.screen_on() 屏蔽状态d.info.get('screenOn')#返回True or False 解锁屏幕d.unloc ...

  3. spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

    spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...

  4. GO语言学习(三)GO语言学习API文档

    一:GoLang标准库API文档 https://studygolang.com/pkgdoc

  5. Android多媒体--MediaCodec 中文API文档

    *由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...

  6. .Net魔法堂:提取注释生成API文档

    一.前言 在多人协作的项目中,除了良好的代码规范外,完整的API文档也相当重要.通过文档我们快速了解系统各模块的实际接口,及其使用场景.使用示例,一定程度上降低沟通成本,和减少后期维护中知识遗失等风险 ...

  7. JAVASE02-Unit01: API文档 、 字符串基本操作

    API文档 . 字符串基本操作 文档注释 package day01; /** * 文档注释只能定义在三个地方: * 类,方法,常量 * * 文档注释是功能注释,用来说明功能作用 * 在类上使用的目的 ...

  8. 为 C# 代码生成 API 文档(译)

    原文地址:http://broadcast.oreilly.com/2010/09/build-html-documentation-for-y.html#comments Sandcastle 功能 ...

  9. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

随机推荐

  1. nat和静态映射

    拓扑图: 实验要求: 1.R2.R3能访问外网的4.4.4.4(4.4.4.4为R4上的环回接口,用来模拟inter网). 2.R4访问222.222.222.100其实访问到的是内网的192.168 ...

  2. 图论--网络流--最大流 洛谷P4722(hlpp)

    题目描述 给定 nn 个点,mm 条有向边,给定每条边的容量,求从点 ss 到点 tt 的最大流. 输入格式 第一行包含四个正整数nn.mm.ss.tt,用空格分隔,分别表示点的个数.有向边的个数.源 ...

  3. UVA-2【NOI2014】起床困难综合症

    #2. [NOI2014]起床困难综合症 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过 ...

  4. 软件——eclipse debug小技巧

    1.开启调试: 在代码编辑处右键单击,在弹出菜单中点击Debug As开始调试 2.几个快捷键: F5:跟入Step into, 一般会跟踪进入到调用函数的函数体,Step Over则不会跟踪进入,直 ...

  5. bootstrap栅格系统的使用

    bootstrap栅格系统的使用 bootstrap栅格系统的使用,主要分为四种方式 1.列组合  col-md-* 2.列偏移 col-md-offset-* 3.列嵌套  大列组合包含着小组合 4 ...

  6. P1353 Running S

    题意:https://www.luogu.com.cn/problem/P1353 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行 n 分钟的晨跑.在每分钟的开始 ...

  7. D. Sequence Sorting dp

    D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...

  8. 简单搜索 kuangbin C D

    C - Catch That Cow POJ - 3278 我心态崩了,现在来回顾很早之前写的简单搜索,好难啊,我怎么写不出来. 我开始把这个写成了dfs,还写搓了... 慢慢来吧. 这个题目很明显是 ...

  9. Hexo 博客利用 Nginx 实现中英文切换

    本文记录了对 Hexo 博客进行中英文切换的配置过程,实现同一应用共用模版,任何页面可以切换到另一语言的对应页面,并对未明确语言的访问地址,根据浏览器语言进行自动跳转 实现细则 中英文地址区分 博客中 ...

  10. Spring方法注入的使用与实现原理

    一.前言   这几天为了更详细地了解Spring,我开始阅读Spring的官方文档.说实话,之前很少阅读官方文档,就算是读,也是读别人翻译好的.但是最近由于准备春招,需要了解很多知识点的细节,网上几乎 ...