首页 > 其他分享 >uiautomator2使用方法

uiautomator2使用方法

时间:2024-05-09 19:22:46浏览次数:19  
标签:滚动 True app 元素 click 使用 uiautomator2 方法 self

一.设备连接

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

 

标签:滚动,True,app,元素,click,使用,uiautomator2,方法,self
From: https://www.cnblogs.com/lihongtaoya/p/18182892

相关文章

  • 免费使用OpenAI DALLE 3
    参考https://mp.weixin.qq.com/s?__biz=MzUyODkwNTg3MA==&mid=2247484240&idx=1&sn=20200b072d351abe608d50b70f29717e&chksm=fa6860b1cd1fe9a7fecb1bc74114ea02171e51721d2179005e39ad585a1d343f85b9734e31bf&scene=21#wechat_redirecthttps://cloud.ten......
  • c4d云渲染怎么操作?怎么使用?一文带你了解
     Cinema4D(C4D)不仅是众多设计师所青睐的卓越三维软件,其自带的高效渲染器以及对云渲染农场的支持,都极大地拓宽了创意和生产的边界。通过利用强大的云计算资源,C4D能够帮助用户轻松克服渲染速度缓慢的难题,从而实现更加流畅和高效的工作流程。本文为大家分享C4D云渲染的具体使用......
  • 一种新的基于机器学习的示波法血压估计方法,开源、低功耗、低成本的人工智能软硬件提供
    具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI人工智能血压的测量和预测是心脏病患者和有心脏问题的人的一个重要条件,应该保持持续的控制。在这项研究中,基于从使用袖带的个体获得的振荡波形,振荡波形分为三个周期。第一个周期是从起点到收缩压(SBP),第二个周期是......
  • 如何使用python设计logo
    如何使用Python设计Logo一、引言在这篇文章中,将介绍如何使用Python来设计一个简单的Logo。将使用Python的第三方库PIL(PythonImagingLibrary)来实现这个功能。PIL是一个强大的图像处理库,可以帮助轻松地处理各种图像操作,如缩放、旋转、裁剪等。二、准备工作在开始设计Logo之前,......
  • 为女朋友朋友圈自拍点赞,幽默又深情的方法
    为女朋友朋友圈自拍点赞,幽默又深情哈哈,宝贝,你今天的自拍真是惊艳了朋友圈的每一个角落啊!看到你,我突然想到了那句话——"回眸一笑百媚生,六宫粉黛无颜色"。......
  • 如何使用stable diffusion设计logo
    好的,我可以帮你写一篇关于如何使用stablediffusion设计logo的文章。这篇文章将从第二级标题开始,主题为:如何使用stablediffusion设计logo。二级标题:什么是StableDiffusion?StableDiffusion是一种尖端的文本到图像扩散模型,可以根据任何给定的文本输入生成逼真的图像。通过使用......
  • MySQL 创建数据库使用 UTF-8 问题
    问题描述将emoji符号(如......
  • Springboot项目的jar包的运行方式以及使用yum安装java后忘记了位置
    SpringBoot项目打包后的jar的部署方式这里我写了五种部署方式1.直接启动java-jarxxx.jar这种方式就只适合自己在测试时用一下,关闭会话就能停止运行属实是方便。2.后台启动java-jarxxx.jar&在后台静默启动,同样关闭会话也会停止,优点是和上面一样,日志是打印在窗口的3......
  • mysql - mysql 命令行的使用
    1.Mysql管理连接数据库--连接本地数据库mysql-uroot-p--连接远程数据库mysql-h192.168.0.105-uroot-p--连接远程指定数据库并设置字符集mysql-h192.168.0.105-uroot-p--default-character-set=utf8test修改root密码,直接修改配置文件[mysql]......
  • VMWare Workstation安装CentOS7使用桥接模式无法ping通问题
    无线网络下VMWare+CentOS7使用桥接模式无法联通网络问题_vmwarecentos桥接模式连不上网-CSDN博客编辑->虚拟网络编辑器VMnet0自动模式不行,要选择对应的网卡;可在网络连接里等方式查看网卡名称;不是管理员身份运行VMWareWorkstation默认不显示VMnet0,右下角有个啥按钮,点击一下......