赞
踩
1. 在远程机器的cmd窗口执行以下命令
pip install -U uiautomator2
1. 在远程机器的cmd窗口运行以下命令安装包含httprpc服务的apk到手机
python -m uiautomator2 init
2. 命令执行成功以后会发现手机安装以下软件
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")
1.先关闭启动weditor的cmd窗口
2.清理浏览器cookie缓存,以下以Google浏览器为例
3.重启ADB
adb kill-server
adb start-server
4.执行命令重连设备
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。