Android APP自动化工具uiautomator2超详细环境搭建+例子演示_uiautomator2 安装

1.  在远程机器的cmd窗口执行以下命令

pip install -U uiautomator2

安装atx-agent

1.  在远程机器的cmd窗口运行以下命令安装包含httprpc服务的apk到手机

python -m uiautomator2 init

2.  命令执行成功以后会发现手机安装以下软件

安装weditor

1.  在远程机器的命令行窗口执行以下命令

pip install -U weditor

由于我直接安装出错了,所以加了个版本号安装的是0.5.2版本

2.  在命令行输入 weditor 会自动打开浏览器,在页面上输入模拟器的设备序列号,点击Connect,然后点击Dump Hierarchy刷新,可以看到模拟器的界面,如果连接不上可能是ATX没有启动,在手机打开ATX,点击启动UIAUTOMATOR

设备序列号就是下面红色框内的,自己在远程机器上输入adb devices查看

刷新之后转圈时间过久的问题

1.打开设置->电池->找到ATX应用 关闭省电的措施项,再刷新就会发现不再持久转圈了

开始测试

以下操作我都是在远程机器上进行的

**需求:**以百度贴吧为例子,我想要做的是通过代码打开百度贴吧app,点击搜索按键并搜索饥荒吧,然后点进饥荒吧进行浏览(别问为什么是饥荒吧,因为最近爱玩)

1.先创建一个工程pytestcode,在pytestcode下面创建一个模块test.py

2.导入uiautomator2取个别名u2,然后使用u2的connect_adb_wifi()方法进行连接,这个方法的参数是设备序列号(通过adb devices获取),连接后返回的device对象取名为d,使用d.info能够打印出设备的基本信息说明连接成功

3.启动指定的app其语法如下 d.app_start(“指定的包名”)

如何获取包名?可以先在手机上打开贴吧app,然后打印d.info,其中有个currentPackageName字段的值就是贴吧app的包名

 4.点进百度贴吧之后,打开weditor UI查看器,刷新后鼠标移动到搜索按钮并点击,可以看到有两种定位方式可以选择,一种是resourceId,一种是xpath

**注意:**我们可以点击别的元素看看,会发现resourceId和某些元素是一模一样的,在这种resourceId不是唯一的情况下,如果我们以resourceId来定位,执行代码之后就会发现并没有反应,所以在这种情况下可以用xpath定位

xpath定位的语法:

d.xpath(‘元素定位表达式’)

5.  强制等待与隐式等待,在打开app以后就能直接使用xpath找到元素并点击了吗?并不可以,因为代码执行的时间是很快的,可能执行到xpath点击元素的代码的时候,元素可能还没有加载出来,所以必须要进行等待,可以使用time.sleep()进行强制等待,但是我推荐使用d.implicitly_wait(等待时长) 隐式等待,隐性等待只需要加一次,全局通用。

隐性等待的语法:

d.implicitly_wait(等待时长) #单位是s

如果设置等待时长为10s,那么不管等待第几个元素最多是等待10s,如果需要的元素在2s就出现了,那么就执行下一步,并不会一直死等

因此代码如下:

import uiautomator2 as u2

#使用ip+端口号无线连接手机,参数是设备序列号,通过adb devices获取
d = u2.connect_adb_wifi('192.168.8.153:5555')
#打印设备的基本信息
print(d.info)

#启动百度贴吧
d.app_start("com.baidu.tieba")

#隐式等待10s
d.implicitly_wait(10)
#通过xpath定位搜索按钮并点击
d.xpath('//*[@resource-id="android:id/content"]/android.widget.RelativeLayout[1]/androidx.viewpager.widget.ViewPager[1]/android.view.ViewGroup[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android.widget.ImageView[1]').click()

6.  点击搜索按键之后,需要在搜索框输入饥荒,然后点进饥荒吧,打开weditor UI查看器查看搜索框的信息,可以发现resourceId是唯一的,所以可以使用resourceId来定位

resourceId的定位语法:

d(resourceId = “元素定位表达式”)

查看搜索框的信息

搜索结果如下:

uiautomator2支持使用文本作为元素定位方式

text的定位的语法:

d(text=“元素定位表达式”)

所以可以使用文本来定位饥荒吧并点击

代码如下:

import uiautomator2 as u2

#使用ip+端口号无线连接手机,参数是设备序列号,通过adb devices获取
d = u2.connect_adb_wifi('192.168.8.153:5555')
#打印设备的基本信息
print(d.info)

#启动百度贴吧
d.app_start("com.baidu.tieba")

#隐式等待10s
d.implicitly_wait(10)
#通过xpath定位搜索按钮并点击
d.xpath('//*[@resource-id="android:id/content"]/android.widget.RelativeLayout[1]/androidx.viewpager.widget.ViewPager[1]/android.view.ViewGroup[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android.widget.ImageView[1]').click()
#通过resourceId定位到搜索框并搜索饥荒
d(resourceId = "searchBox").send_keys("饥荒")
#通过text定位来点进饥荒吧
d(text="42a98226cffc1e17a1d872fb4190f603728de991").click()

7.  滑动操作

滑动操作的语法:

d.swipe(fx,fy,tx,ty,duration)

获取屏幕的语法是:

d.window_size()

**注:**fx,fy表示的是起点的坐标,tx,ty表示的是终点的坐标,duration表示的是滑动持续的时间,在移动设备屏幕上,通常情况下坐标系统的原点(0,0)位于屏幕的左上角,即左上角的像素点被定义为坐标原点。从原点开始,向右为 X 轴正方向,向下为 Y 轴正方向。

那么起点和终点的坐标如何获取?为了适应不同的分辨率,我们可以先获取到屏幕的尺寸,然后分别乘以系数,为了加强滑动的稳定性,需要进行强制等待

点进饥荒吧之后,往上滑一秒,代码如下:

import time
import uiautomator2 as u2

#使用ip+端口号无线连接手机,参数是设备序列号,通过adb devices获取
d = u2.connect_adb_wifi('192.168.8.153:5555')
#打印设备的基本信息
print(d.info)

#启动百度贴吧
d.app_start("com.baidu.tieba")

#隐式等待10s
d.implicitly_wait(10)
#通过xpath定位搜索按钮并点击
d.xpath('//*[@resource-id="android:id/content"]/android.widget.RelativeLayout[1]/androidx.viewpager.widget.ViewPager[1]/android.view.ViewGroup[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android.widget.ImageView[1]').click()
#通过resourceId定位到搜索框并搜索饥荒
d(resourceId = "searchBox").send_keys("饥荒")
#通过text定位来点进饥荒吧
d(text="42a98226cffc1e17a1d872fb4190f603728de991").click()

#获取屏幕宽和高
width, height = d.window_size()
#强制等待2s,之所以强制等待是因为点击饥荒吧之后会加载一段时间,为了等到屏幕出现再滑动,所以强制等待
time.sleep(2)
#往上滑1s
d.swipe(0.5 * width, 0.8 * height, 0.5 * width, 0.3 * width, 1)

#停止app
d.app_stop("com.baidu.tieba")
#清理环境
d.app_clear("com.baidu.tieba")

weditor报错Local server not started, start with

1.先关闭启动weditor的cmd窗口

2.清理浏览器cookie缓存,以下以Google浏览器为例

  • 先点击右上角三个点,选择设置

  • 进入设置后点击隐私和安全,再点击清除浏览器数据

  • 勾选以下数据并清除

3.重启ADB

adb kill-server

adb start-server

4.执行命令重连设备

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

649)]

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值