一.设备连接

1.usb单设备连接

d = u2.connect()

2.usb多设备连接

d = u2.connect("90bf8faf")  # 多台设备填写device即可

3.wifi连接

d = u2.connect("ip:proxy")  # wifi连接设备

adb使用wifi连接设备:https://www.cnblogs.com/lihongtaoya/p/17553171.html

二.使用操作

1.点击

#  click点击
d(description="点按两次并按住可长按进入多选模式").click() # 也可更加某点就行点击d.click(0.1,0.1)
# 单击直到元素消失,点击间隔1s,maxretry超时时长
d(description="点按两次并按住可长按进入多选模式").click_gone(maxretry=5, interval=1)

2.长按

# 长按long_click
d(description="点按两次并按住可长按进入多选模式").long_click()

3.文本

# 文本
d.send_keys("1234") # 光标停留在输入框后直接sendkeys,自动切换fastinputime输入法
d.clear_text() # 光标停留在输入框清空内容

4.拖拽

1)元素到元素拖拽

# 元素到元素拖拽drag_to
d(text="SecoClient").drag_to(text="哔哩哔哩", duration=0.25) # 将元素SecoClient拖到”哔哩哔哩“的位置,时间0.25s

2)元素到坐标拖拽

# 元素到坐标的拖拽 drag_to
d(text="SecoClient").drag_to(0.603, 0.587, duration=0.25)

3)坐标到坐标拖拽

# 两个坐标之间拖拽drag
d.drag(x1,y1,x2,y2)

5.滑动

1)元素滚动

# 元素滑动"left", "right", "up", "down" 左右上下,一个步长5ms,20个step是100ms
d(text="SecoClient").swipe("up", steps=20) # 将元素向上拖拽,时长100ms

2)屏幕滚动

# 屏幕滑动
x, y = d.window_size() # 获取屏幕分辨率
x1 = x * 0.1
y1 = y * 0.3
y2 = y * 0.6
d.swipe(x1, y1, x1, y2) # 手势向下滑,从竖屏30%的地方滑到60%的位置
d.swipe(x*0.9, y*0.1, x*0.1, y*0.1) # 向右滑,从横屏90%的地方滑到10%的位置

也可直接操作滑动

# 直接滑动  "left", "right", "up", "down" 左右上下
d.swipe_ext("left")

3)界面滚动

滚动类型:horiz 为水平 vert 为垂直

滚动方向:forward 向前 , backward 向后 , toBeginning 滚动至开始 , toEnd 滚动至最后 ,to 滚动直接某个元素出现

# 界面滚动(界面是否可以滚动)  不太好用
d(scrollable=True).scroll.vert.toBeginning() # 垂直滚动到页面顶部(不填vert,默认就是垂直)
d(scrollable=True).scroll.vert.toEnd() # 垂直滚动到页面底部
d(scrollable=True).scroll.horiz.toEnd() # 水平滚动置末尾,即最右侧
d(scrollable=True).scroll.horiz.toBeginning() # 水平滚动置开头,即最左侧
d(scrollable=True).scroll.horiz.forward() # 水平向前滚动一下
d(scrollable=True).scroll.horiz.backward() # 水平向后滚动一下
d(scrollable=True).scroll.vert.forward() # 垂直向下滚动一下
d(scrollable=True).scroll.vert.backward() # 垂直向上滚动一下

滚动置某一个元素停下来

# 滚动置某个元素停下
d(scrollable=True).scroll.vert.backward.to(resourceId="id/title", text="《系列》电影") # 水平向上滚动到指定元素停下,向上找不到元素会往下滚动
d(scrollable=True).scroll.vert.toBeginning.to(text="SDK") # 垂直向上到指定元素停下,向上到顶部找不到元素会往下滚动

4)连续滚动

d.touch.down(x,y)   按住某个点

d.touch.sleep(5)   停留5s

d.touch.move(x,y)   移动到某点

d.touch.up(x,y)  在某点松开

# 连续滑动 touch(手机图案解锁)
d.touch.down(0.841, 0.477).sleep(3).up(0.841, 0.477) # 在0.841, 0.477点击3s后松开,实现长按
# 从0.841, 0.477移动到0.827, 0.234后在0.186, 0.268松开,开始点击的时候长按0.2s,因为touch执行的特别快,按住图标后手机程序还没反应过来就结束了,导致滑动没有任何效果
d.touch.down(0.841, 0.477).sleep(0.2).move(0.827, 0.234).move(0.186, 0.268).up(0.186, 0.268)

6.放大缩小

# 放大缩小
d(resourceId="com.vivo.gallery:id/gallery_root_bottom").pinch_in() # 缩小
d(resourceId="com.vivo.gallery:id/gallery_root_bottom").pinch_out() # 放大
# 指定放大缩小范围(单指1初位置)(单指2初位置)(滑动后单指1的位置)(滑动后单指2的位置)
d(resourceId="com.vivo.gallery:id/gallery_root_bottom").gesture((0.51, 0.327),(0.51,0.484),(0.51,0.147),(0.51,0.772))

7.等待元素出现/消失

# 等待元素出现或消失
bol = d(text="哈哈").wait(timeout=3.0) # 等待元素出现,时长3s,3s内出现返回true,未出现返回false
bol=d(text='哈哈').wait_gone(timeout=3) # 等待元素消失,时长3s,3s内消失true,未消失返回false

8.按键

# 按键
d.press("enter") # 目前仅支持 home, back, left, right, up, down, center, menu, search, enter,delete(or del), recent(recent apps), volume_up, volume_down,volume_mute, camera, power
# 或
d.keyevent("enter")

9.输入法切换

# 输入法切换
d.set_fastinput_ime(True) # 设置默认输入法与fastinputime输入法转变(True为fastinputime,false默认输入法)
print(d.current_ime()) # 查看当前输入法

10.模拟fastinputime输入法键盘操作

# 模拟fastinputime输入法键盘操作
d.send_action(5) # 下一步
# 或
d.send_action("next") # 目前仅支持如下几个
"""
"go": 2,
"search": 3,
"send": 4,
"next": 5,
"done": 6,
"previous": 7
"""

11.截图

# 截图
d.screenshot("test.png") # 当前项目目录下

12.录制

1)安装依赖:pip install -U "uiautomator2[image]"

2)方法

d.screenrecord('test.mp4')  # 开始
time.sleep(2)
d.screenrecord.stop() # 结束

13.应用管理操作

1)获取当前页面信息

print(d.app_current())  # 获取当前页面信息:package,activity,pid

2)安装app

d.app_install("url")  # 安装app

3)启动app

d.app_start("package_name")

4)获取app信息

print(d.app_info("package_name"))  # 获取app信息

5)退出应用

退到后台

d.app_stop("package_name")  # 返回主界面

清除缓存(杀进程)

d.app_clear("package_name")  # 杀进程清除缓存

6)获取设备ip

print(d.wlan_ip)  # 手机ip

7)获取设备信息(cpu,电池等)

print(d.device_info)  # 获取设备信息(型号,cpu,电池等信息)

8)卸载app

d.app_uninstall('tv.danmaku.bili')  # 卸载

9)等待应用启动

"""
等待应用变为当前应用,返回pid,超时未启动成功则返回0
front为true表示等待app成为当前app,
默认为false,表示只要后台有这个应用的进程就会返回PID
"""
a=d.app_wait("com.tencent.wework",6,front=True) # 返回pid
print(a)

13.全局设置

1)查看默认配置

print(d.settings)
"""
{
'fallback_to_blank_screenshot': False,
'operation_delay': (0, 5), 点击元素后延迟0-5秒
'operation_delay_methods': ['click', 'swipe'], 点击元素延迟时间生效的方法(可以增加press,send_keys等 )
'wait_timeout': 20.0, 查找元素默认等待时长
'xpath_debug': False xpath日志
}
"""

2)修改默认配置

d.settings["wait_timeout"]=10  # 修改设置,按照字典来修改即可

全局等待时长还可通过implicitly_wait来设置

d.implicitly_wait(10)

14.息/亮屏

d.screen_off()  # 息屏(锁屏)
d.sleep(5)
d.screen_on() # 亮屏

15.通知栏操作

d.open_notification()  # 打开通知栏
d.open_quick_settings() # 打开通知栏设置页

16.停止ATX服务

d.service("uiautomator").stop()  # 停止atx服务

17.读取devices信息

print(d.info)

三.实例

以市场上一个可以开播的软件为了实现登录开播

import uiautomator2 as u2

class Uiautomator2App:
def __init__(self):
self.d = u2.connect()
self.d.implicitly_wait(10)
self.d.app_start("tv.dm") def login(self):
self.d(text="其他登录方式").click()
self.d(resourceId="android:id/button1").click() # 密码登录
self.d(resourceId="tv.dm:id/username").click()
self.d.send_keys("用户名")
self.d.send_action(5)
self.d.send_keys("密码")
self.d(resourceId="tv.dm:id/log_reg_checkbox").click() # 勾选协议
self.d(resourceId="tv.dm:id/btn_login").click() # 登录 def bo(self):
while True:
if self.d(resourceId="tv.dm:id/tab_text", text="首页").wait(timeout=3.0):
self.d.click(0.487, 0.968) # 进入直播页面
break
else:
continue self.d.xpath(
'//*[@resource-id="tv.dm:id/wtlTabs"]/android.widget.LinearLayout[1]/android.widget.RelativeLayout['
'1]/android.widget.FrameLayout[1]').click() # 开启直播 def exit(self):
self.d.app_clear("tv.dm:id") # 退出应用 if __name__ == '__main__':
u = Uiautomator2App()
u.login()
u.bo()
u.exit()

import uiautomator2 as u2

uiautomator2使用方法的更多相关文章

  1. uiautomator2.0框架

    1.   Uiautomator1.0 Uiautomator2.0 date 2012 2015 super class UiAutomatorTestCase InstrumentationTes ...

  2. 基于UiAutomator2+PageObject模式开展APP自动化测试实战

    前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...

  3. uiautomator2 常用方法

    常用功能方法的整理和总结 导入 import uiautomator2 as u2 连接ADB设备: 可以通过USB或Wifi与ADB设备进行连接,进而调用Uiautomator2框架,支持同时连接单 ...

  4. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  5. uiautomator2.0的配置的两种方法

    方法一(使用在线下载的方式导入依赖): 1.首先创建项目工程,创建的项目的android_api版本要与测试的android_api版本一致(24就是24 ,不能26或者17去兼容) 2.然后就是将本 ...

  6. python uiautomator2 watcher的使用方法

    该方是基于uiautomator2如下版本进行验证的: PS C:\windows\system32> pip show uiautomator2 Name: uiautomator2 Vers ...

  7. python + uiautomator2 常用公共方法封装

    前言 由于公司UI自动化框架底层用的是Uiautomator2,所以我就用Uiautomator2搭了一套UI自动化框架,思路其实和Appnium一样的. uiautomator2是一个自动化测试开源 ...

  8. 【学习ATX基于uiautomator2】之API操作Android方法

    具体API可参考:<uiautomator2>以及参考github官方文档 感谢:Ricky_Frog <Python+uiautomator2手机UI自动化测试实战 -- 2. 用 ...

  9. UiAutomator2.0升级填坑记

    UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...

  10. UiAutomator2.0 - Toast信息的验证

    目录 问题:在做UI自动化测试时,偶尔会碰到 Toast 这种提示信息(如图),通过Uiautomatorviewer 无法获该类控件的信息.所以无法验证,该条case不能实现.然后就没然后了... ...

随机推荐

  1. #平衡树#洛谷 2611 [ZJOI2012]小蓝的好友

    题目 在 \(R\times C\) 的矩形中,问有多少个子矩形使得存在一个给定点在其中, 保证点随机,\(R,C\leq 4\times 10^4,n\leq 10^5\) 分析 考虑容斥,用总方案 ...

  2. #扫描线,线段树#nssl 1459 空间复杂度

    分析 由于\(k\leq 10\)所以考虑用总方案减去经过两个差的绝对值\(\leq k\)的点的路径数 分类讨论一下发现要处理祖先关系和其它关系两种情况,考虑怎么去重,可以将这些答案看作一个个矩形, ...

  3. #线段树合并#JZOJ 5365 通信

    分析 取出一段区间后答案就是虚树边的个数的两倍, 考虑计算\(x\)与父亲的边对答案的贡献, 那么不能够贡献的就是\(x\)的子树下标连续的一段或者是非\(x\)的子树连续的一段, 考虑将\(x\)的 ...

  4. MySQL 数据库操作指南:LIMIT,OFFSET 和 JOIN 的使用

    限制结果 您可以通过使用"LIMIT"语句来限制查询返回的记录数量.以下是一个示例,获取您自己的Python服务器中"customers"表中的前5条记录: i ...

  5. Qt Create开发,修改 .Pro 文件改变 exe 的名称

    // .pro // 修改 TARGET 就可以改变生成的exe的名称 TARGET = Test // 要是生成的exe名称中需要带有空格,需要用到$$quote TARGET = $$quote( ...

  6. Python smtp发送邮件怎么设置抄送人

    设置抄送人,非常简单,只需要添加一条信息就可以了,例: cc_list = ['xx@xxx.cn', 'xx@xxx.cn'] msg['Cc'] = ','.join(cc_list) smtp. ...

  7. echarts X轴类目名太长时隐藏,hover时显示全部

    echarts图表X轴 在柱状图中,X轴类目名如果数据太长: echarts会默认进行隐藏部分字段: 如果我们想让每一个类目名都显示出来,需要进行额外的处理 X轴类目名太长时,默认只显示一部分类目名 ...

  8. .NET 9 预览版 3 发布

    我们很高兴地宣布发布 .NET 9 预览版 3,其中包含 .NET 库.运行时和 SDK 的新功能和改进.此预览版带来了旨在提高性能.提高开发人员工作效率以及向 .NET 生态系统引入新功能的增强功能 ...

  9. jenkins 持续集成和交付 —— 邮箱服务器配置(九)

    前言 简介邮箱服务器的配置,让jenkins在构建完成后,能有一个邮箱结果通知到我们,这样就不用每次盯着jenkins 看是否完成了. 正文 1.安装插件 安装下面这个插件. Email Extens ...

  10. tomcat 服务版本内存设置

    1. 安装服务,如需指定java路径,需要在service.bat 中修改, 如下图 其中 pa代表当前目录 2. 安装服务, service.bat install 服务名,如下图示例 3. 内存设 ...