python+uiautomator2 UI自动化

uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。
其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,模拟认为点击,滑动,输入等操作!

一、github地址
GitHub地址:https://github.com/openatx/uiautomator2

二、版本要求
python3.4以上
安卓4.4以上

三、安装

  1. python自行安装配置环境
  2. 安装uiautomator2
pip install --pre uiautomator2
pip install pillow

四、安装adb
adb自行安装配置环境

五、初始化
配置手机设备参数:
有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机连接电脑。
WiFi连接更方便一点,需要保持PC和手机使用的一个WIFI,查看手机连接WIFI的IP地址。

adb devices  #查看设备名称
python -m uiautomator2 init #uiautomator2初始化

初始化完成移动会多出一个uiautomator的应用。

六、代码连接测试

import uiautomator2 as u2
d = u2.connect('127.0.0.1::6555')
print(d.info)
打印结果:{'currentPackageName': 'com.android.launcher', 'displayHeight': 1280, 'displayRotation': 1, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 720, 'productName': 'DUK-AL20', 'screenOn': True, 'sdkInt': 23, 'naturalOrientation': False}

七、元素定位
一定要使用线连接
(1)、安装:
pip install --pre --upgrade weditor
(2)、使用
python -m weditor
(3)、工具打开
默认会通过浏览器打开页面:http://atx.open.netease.com/
(4)工具的操作步骤
选择android、输入手机或者模拟器的ip+端口,点击connect
dump hierarchy是用来刷新页面的
鼠标点击想要的元素,就可以查看他们的控件了
八、主要语法

  1. 主要语法
(1)启动app
d.app_start("com.android.yinyue")(2)关闭app
cls.d.app_stop("com.android.yinyue")(3)ResourceId定位
cls.d(resourceId="com.android.yinyue:id/ad_banner").click()(4)Text定位
d(text="精选").click()(5)Description定位
d(description="..").click()(6)ClassName定位
d(className="android.widget.TextView").click()(7)xpath定位
d.xpath("//*[@content-desc='分享']").click()

2、其他操作

(1)#组默认元素等待超时(秒)
cls.d.wait_timeout = 20.0  #默认20
(2)元素拖拽
(3)开关点击
d(A).left(B), selects B on the left side of A.
d(A).right(B), selects B on the right side of A.
d(A).up(B), selects B above A.
d(A).down(B), selects B under A.
例如:
#选择“Wi-Fi”右侧的“开关”
d(text="Wi‑Fi").right(className="android.widget.Switch").click()
(4)获取/统计某个相同条件的数目
d(text="Add new").count
或者
len(d(text="Add new"))
得知数目之后,我们可以通过索引去定位
d(text="Add new")[0]
d(text="Add new")[1]
也可以遍历for view in d(text="Add new"):view.info (5)截图
#截取屏幕截图并保存到计算机上的文件中,要求Android> = 4.2。
d.screenshot( “ home.jpg ”) # get PIL.Image格式化图像。当然,你需要首先安装pillow
image = d.screenshot() # default format =“pillow”
image.save( “ home.jpg ”)#或home.png。目前,只有PNG和JPG支持#得到OpenCV的格式图像。当然,你需要先安装numpy和cv2
import cv2
image = d.screenshot( format = ' opencv') cv2.imwrite( ' home.jpg '图像)#获取原始JPEG数据 imagebin = d.screenshot(格式= '原始') 打开( “ some.jpg ”, “ WB ”).WRITE(imagebin)
(6)手势操作
1、单击
d( text = “ Settings ”).click()
2、长按
d( text = “ Settings ”).long_click()
3、将对象拖向另一个点或另一个UI对象
#笔记:拖不能用于为Android <4.3。
#将UI对象拖动到屏幕点(x,y),0.5秒后
d( text = “设置”).drag_to(x,y, duration = 0.5)
#将UI对象拖动到另一个(中心位置) UI对象,在0.25秒
d( text = “设置”).drag_to( text = “ Clock ”, duration = 0.25)
4、在屏幕上滑动
# swipe from (sx, sy) to (ex, ey)
d.swipe(sx, sy, ex, ey)
# swipe from (sx, sy) to (ex, ey) with 10 steps
d.swipe(sx, sy, ex, ey, steps=10)
5、在屏幕上拖拽
# drag from (sx, sy) to (ex, ey)
d.drag(sx, sy, ex, ey)
# drag from (sx, sy) to (ex, ey) with 10 steps
d.drag(sx, sy, ex, ey, steps=10)
(7)获取对象信息和状态
1、d(text="Settings").exists
#如果存在则为True,否则为假
or d.exists(text="Settings") # 进一步使用 d(text="Settings").exists(timeout=3)
# 等待设置出现在3S,相同.wait(3)
2、检索特定UI对象的信息
d(text="Settings").info3、获取/设置/清除可编辑字段的文本(例如,EditText小部件)
d(text = “ Settings ”).get_text()   # get widget text
d(text = “ Settings ”).set_text(“ My text ... ”)   #设置文本
d(text = “ Settings ”).clear_text( )   #清除文字、(8)系统常用按键
# press home key
d.press.home()
# press back key
d.press.back()
# the normal way to press back key
d.press("back")----亲测可用
# press keycode 0x07('0') with META ALT(0x02) on
d.press(0x07, 0x02)home                   #手机Home键
back                   #手机返回键
left                   #对应键盘上的向右键<-
right                  #对应键盘上的向右键->
up                    #对应键盘上的向上键
down                   #对应键盘上的向下键
center                  #选中?
menu                   #菜单
search                  #查找?
enter                  #对应键盘上的Enter键
delete(or del)                          #对应键盘上的DEL键 用于删除
recent(recent apps)                  #任务切换
volume_up                #声音向上调整
volume_down               #声音向下调整
volume_mute               #静音按键
camera                  #拍照
power                   #电源键

九、使用经验
1、使用前初始化
python -m uiautomator2 init
2、打开工具
python -m weditor

  1. 因为UIAutomator2的api-UIObject里面不支持获取组件属性isCheckable(),isChecked(),isClickable()…等等

  2. 但是UIAutomator2 支持回去全部的属性d.info,并返回一个字典值,例子:
    flag = d(resourceId = ‘com.gtk.watch.settings:id/ct_hour_type’).info[‘checked’]

这句代码的意思是指:获取这个组件的所有信息,并获取这个组件是否被选中了,如果选中了就返回True,否则就返回False,

1.判断按钮状态
if d(resourceId=“id”,enabled=False): #判断当前按钮是否为未激活状态,为True则为激活状态
2.获取toast提示语
d.toast.get_message(5.0, default="")
3. 获取元素的属性
ele = d(resourceId=“id”) ele.info ele.info[""enabled] ele.info[“checked”]

移动端UI自动化一定要结合图像识别:https://blog.csdn.net/huage926/article/details/115298887?spm=1001.2014.3001.5501

python+uiautomator2 UI自动化相关推荐

  1. pythonapp自动化_Android App持续集成性能测试:使用Python实现UI自动化

    本帖最后由 Android_Robot 于 2016-10-26 15:12 编辑 本篇内容主要为大家提供的是Android App持续集成性能测试:使用Python实现UI自动化.感兴趣的同学可以参 ...

  2. 【python】UI自动化-uiautomation

    UI自动化-uiautomation 0- 前言 1- inspect 2- uiautomation 3- [实战]RustDesk软件自动 安装.指定服务器信息 4- 参考文章 0- 前言 做应用 ...

  3. python做ui自动化_[python]RobotFramework自定义库实现UI自动化

    1.安装教程 环境搭建不多说,网上资料一大堆,可参考https://www.cnblogs.com/puresoul/p/3854963.html,写的比较详细,值得推荐.目前python3是不支持r ...

  4. uiautomator +python 安卓UI自动化尝试

    使用方法基本说明:https://www.cnblogs.com/mliangchen/p/5114149.html,https://blog.csdn.net/Eugene_3972/article ...

  5. pythonapp自动化_GitHub - qdyxmas/PyAutoTest: python Autotest UI自动化 APP自动化 HTTP接口自动化...

    PyAutoTest自动化平台 1.环境搭建 1.1 下载或拷贝整个PyAuthoTest到指定的目录,如D:\PyAuthoTest 1.2 安装Python2.7以及需要使用到的安装包列表如下 r ...

  6. python selenium UI自动化解决验证码的4种方法

    测试环境 windows7+ firefox50+ geckodriver # firefox浏览器驱动 python3 selenium3 selenium UI自动化解决验证码的4种方法:去掉验证 ...

  7. Python Selenium UI自动化:滚动条滑动

    文章目录 问题 滑动至固定位置 Window 对象方法 - scrollTo js&python:滑动至固定位置 滑动至元素 元素对象方法 js&python:滑动至元素 问题 在UI ...

  8. Python Selenium UI自动化 ⽂件上传

      UI自动化进行文件上传,其实本质就是将所需上传的文件路径,传递给后端服务即可,至于读取文件的过程,其实开发人员已经在后端服务中完成了.所以我们要做的就是:拿到文件路径 -> 传出去.那么这里 ...

  9. Python+Selenium UI自动化 - 调用JS代码

    当webdriver遇到无法完成的操作时候,这个时候可以使用javascript来完成,webdriver提供了execute_script()接口来调用js代码. 执行js有两种场景: 1.在页面上 ...

最新文章

  1. BitTorrent协议规范(BitTorrent Protocol Specification)系列之元信息文件结构(Metainfo File Structure)-第二部分...
  2. struts2基础梳理(二)
  3. unity 2017 代码加密
  4. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
  5. viewpager初始化fragment没有绘制_NDK OpenGL ES渲染系列 之 绘制三角形
  6. Origin 2022安装教程(附下载链接)
  7. 大数据面试题知识点分析(十一)之Flume面试真题及答案
  8. IDEA中Javaweb项目图片加载不出来解决方案
  9. 电脑开机内存占用过高处理
  10. Python开发——做一个简单的【表白墙】网站
  11. android 区分平板,加量不加价!台电首款基于Android 11的平板终上市
  12. 用C语言求出0~999999之间的所有“水仙花数”并输出。
  13. [ 工具 ] ___ Browser : Chrome
  14. TS实现原生数组方法之pop()、push()、shift()、unshift()
  15. 求解500万以内的亲和数
  16. clap与slap_(2xslap,slap,slap,clap,slap)Doinapos;theFACTSNowthatapos;s.ppt
  17. 数据平面开发套件:DPDK
  18. 从零开始带你成为JVM实战高手
  19. ip地址掩码和位数对应关系表、子网掩码、网络地址、主机地址-yellowcong
  20. SitePoint播客#22:Bing的Boondoggles

热门文章

  1. 秦老师说21天养成一个习惯,写博客打卡第一天
  2. Logstash学习
  3. [相机配置] 海康相机丢包配置环境
  4. Matlab中ind2gray函数用法
  5. 好用的android 串口驱动
  6. java类似金山打字的键盘模拟_java实现 swing模仿金山打字 案例源码
  7. C++11 解决内存泄露问题的智能指针:shared_ptr、unique_ptr、weak_ptr
  8. R语言数据分析-练习题【学习总结20201030】[1-20]
  9. python爬虫之使用BeautifulSoup模块抓取500彩票网竞彩足球赛果及赔率
  10. cs无限僵尸服务器,CS1.6僵尸版