【uiautomator2】使用详解

本文详细介绍了uiautomator2的使用,包括如何通过USB或WiFi连接手机,进行基本的设备操作如安装、卸载应用,以及如何进行元素定位和模拟用户交互,如点击、滑动和输入操作。同时,文章还提到了智能等待和处理toast消息的功能。
摘要由CSDN通过智能技术生成

【uiautomator2】使用详解



1. 准备工作

1. 安装
pip install --upgrade --pre uiautomator2

2. 安装手机模拟器,市面上的都可以

3. 安装Android 调试桥 (adb)
https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn

4. 将安装后的SDK platform-tools 配置到环境变量中

5. 验证是否正常的方法,进入cmd中输入adb,不报错即可

2. 如何连接手机

2.1 usb连接

# 可以在cmd上输入 ’adb devices‘ 指令查看连接的设备的序列号
device = u2.connect('传入手机序列号')
print(device.device_info)

2.2 wifi地址连接

# 电脑和手机在同一个局域网内
device = u2.connect('http://192.168.110.3')
device = u2.connect_wifi('192.168.110.2')
device = u2.connect_wifi('192.168.110.3::8820')

# 连接成功后可以打印手机的基本信息
print(device.device_info)

# 可以在cmd上输入指令查看连接的设备
adb devices

2.3 查看手机转发端口

adb forward --list


3. 基本使用

初始化设备 python -m uiautomator2 init

import uiautomator2 as u2
# 连接手机
device = u2.connect()

# 打开被测软件
device(text='软件名称').click()  

4. app的操作

import uiautomator2 as u2
# 连接手机
device = u2.connect('4d5easd45') 

device.app_install('安装的地址') # 安装

device.app_uninstall('package_name') # 卸载

device.app_start('package_name') # 启动app

device.app_stop('package_name') # 关闭app

device.app_current() # 获取当前正在运行的app的包名

device.app_info()  # 获取app的信息

device.app_list_running() # 列出正在运行的app,这个也可以获取包名

device.app_clear('paceage_name') # 清除app数据

5. 设备操作

import uiautomator2 as u2
# 连接手机
device = u2.connect('4d5easd45') 
device.info() # 获取设备基本
device.device_info()  # 获取设备详细信息

device.window_size()  # 获取设备大小

device.screenshot('d:/hello.png')  # 获取设备的截屏 传入电脑存放的路径

# 推送文件(上传文件) 第一个参数 PC需要上传的文件路径 第二个参数 手机端存放路径
# 想要知道手机里的文件结构可以使用 adb shell 命令操作和linux差不多
device.push('d:/hello.png','/data/')

device.pull('/data/hello.png','d:/desktop/') # 拉取文件和推送文件传参数相反

6. 手机按键操作

import uiautomator2 as u2
# 连接手机
device = u2.connect('4d5easd45') 


device.screen_on()  # 亮屏

device.screen_off()  # 熄屏

device.press("home") # 首页

device.press("back") # 返回键

device.press("left") # 左移

device.press("right") # 右移

device.press("up") # 上划

device.press("down") # 下划

device.press("center") # 回到中间页

device.press("menu") # 菜单

device.press("search") # 搜索框

device.press("enter") # 回车键

device.press("delete") # 删除键

device.press("recent") # 打开最近的页面

device.press("camera") # 打开照相机

device.press("power") # 电源键

device.press("volume_up") # 声音调大

device.press("volume_down") # 声音调小

device.press("volume_mute") # 静音

7. 元素定位

pip install weditor 安装weditor (定位辅助工具)

终端中输入python -m weditor启动weditor

"""
    文本定位(也就是web上 text属性) : text , textcontains ,  textMatches , textstartswith
    类名定位(也就是web上 class属性) : c1assName , classNameMatches
    描述内容定位(app描述内容) : description , descriptioncontains , descriptionMatches ,descriptionstartswith
    checkable , checked , clickable , longclickab1e
    scro11able , enab1ed , focusable , focused , selected
    包名定位 : packageName , packageNameMatches
    资源ID定位(也就是web上 id属性) : resourceId , resourceIdMatchesindex 
    index , instance
"""

7.1 多属性定位

# 当定位的时候会遇到一个属性没办法精准定位
device(className='android.widget.TextView')

# 要选text是'hello',className 是'android.widget.TextView' 的元素
device(text='hello', className='android.widget.TextView')

7.2 获取同级和子级的UI对象

# 获取 child 
d(className="android.widget.ListView").child(text="hello")


# 获取 sibling 
d(text="首页").sibling(text="副页")

7.3 相对位置

# 可以用相对位置的方法来获取当前视图中的对象: left, right, top, bottom
# 选择"WiFi"  右侧的"switch" 
d(text="WiFi").right(className="android.widget.Switch").click()

也可以 d(text="WiFi").right().click()

7.4 instance

# 有时候会遇到屏幕上有包含相同特点(例如文本)的多个对象
device(text="hello", instance=0)  # 获取第一个文本中带有“hello”的元素对象


# uiautomator也提供了类似列表的方法来处理类似的元素对象
device(text="hello")[0]

8. app事件操作

8.1 点击操作

# 全局设置每次单击UI后再次单击之间延迟1.5秒
device.click_post_delay = 1.5  # 默认无延迟

# 第一种:先进行元素定位 再进行点击事件
device(text='appName').click()

# 第二种:通过绝对坐标触发点击事件(x,y)
# 个人不推荐使用这个,因为每台手机的分辨率不同
device.click(182,235) 

# 第三种:通过百分比坐标触发点击事件(x,y)
device.click(0.2,0.8)


拓展:
# 长按屏幕
device.long_click(x, y)
device.long_click(x, y, 0.5)  # long click 0.5s (default)

8.2 滑动操作

"""
    对(可滚动)ui对象执行fling  
    Fling(飞滑)一般用于水平或垂直翻页
"""
# fling默认垂直向前 
device(scrollable=True).fling()

# fling水平向前
device(scrollable=True).fling.horiz.forwardevice()

# fling垂直向后
device(scrollable=True).fling.vert.backwardevice()

# 垂直fling到开始
device(scrollable=True).fling.horiz.toBeginning(max_swipes=1000)

# 垂直fling到末尾
device(scrollable=True).flingg.toEnd()
"""
    对(可滚动)ui对象执行scroll
"""
# scroll 默认垂直向前
device(scrollable=True).scroll(steps=10)

# scroll水平向前
device(scrollable=True).scroll.horiz.forward(steps=100)

# scroll垂直向后
device(scrollable=True).scroll.vert.backward()

# 水平scroll到开始
device(scrollable=True).scroll.horiz.toBeginning(steps=100, max_swipes=1000)

# 垂直scroll到末尾
device(scrollable=True).scroll.toEnd()

# scroll 向前垂直,直到出现指定ui object 
device(scrollable=True).scroll.to(text="Security")
"""
    swipe 平滑 
    第一种方式:需要传入四个参数
        startX:起始X坐标
        startY:起始Y坐标
        endX:结束X坐标
        endY:结束Y坐标
"""
device.swipe(500,500,100,500)

"""
    第二种方式:需要传入两个参数
        direction(滑动的方向) : up、down、left、right
        scale(滑动的百分比)
"""
device.swipe_ext('left',scale=0.9)

"""
    第三种方式:先进行元素定位 再滑动
        direction(滑动的方向) : up、down、left、right
        steps(滑动的速度) ms
"""
e = device(text='appname')
e.swipe('left',steps=100)

8.3 用户输入和清空操作

# 先进行元素定位 再进行输入操作
userinput = device(text='userName')
userinput.send_keys('Mr.Tree')

# 清空输入内容
userinput.clear_text()

8.4 智能等待

# 适用场景:app打开速度相较于程序执行速度过慢,需要等待app打开后再执行下面的代码
# 设置全局的超时时间 10s
device.wait_timeout = 10

# 开启智能等待,即app完全打开后才执行后面代码
device.app_start('packagename',wait=True)


# 只要设置了全局的超时时间,则其他的操作也会内置智能等待,不需要再进行任何操作
例如: d.wait_activity() 等待页面加载出来
      d().wait()  等待元素出现
      d().wait_gone() 等待元素消失
      d().exists() 等待元素是否存在

9. toast消息

# 显示Toast消息
device.toast.show("Hello world")

# 获取Toast
device.toast.get_message()

# 清空 cached toast
device.toast.reset()

# 断言
assert "Short message" == d.toast.get_message()

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uiautomator2是一种Android自动化测试框架,可以模拟用户的各种动作。在使用uiautomator2时,需要导入相关的包。例如,可以使用以下代码导入uiautomator2包: ```python import uiautomator2 as u2 ``` 同时,在Android SDK中也提供了一些工具来支持UI自动化测试。其中一个工具是uiautomatorviewer,可以用于扫描和分析UI界面。该工具可以在SDK安装路径的tools目录中找到,通过双击uiautomatorviewer.bat来打开。 需要注意的是,uiautomator2提供了多种操作方法,如点击、长按、输入文本、滑动、拖拽、截屏等。用户可以通过控件的id或text等属性来定位控件,并对其实施相应的操作。 至于双击操作,uiautomator2框架本身并没有提供直接的双击方法。但是,可以通过连续两次点击来实现双击的效果,例如: ```python d = u2.connect() # 连接设备 d.click(500, 500) # 第一次点击 d.click(500, 500) # 第二次点击 ``` 这样就可以实现一个简单的双击操作。请根据实际情况调整坐标值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android自动化测试框架uiautomator2详解](https://blog.csdn.net/m0_37602827/article/details/108249779)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ui automator verver](https://download.csdn.net/download/qq_41191669/10134614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值