赞
踩
weditor报错Local server not started, start with
UiAutomator是Google提供的安卓自动化测试Java库,功能很强,但测试脚本只能使用Java语言,uiautomator2是uiautomator的升级版,uiautomator2将uiautomator中的接口封装成了Python库,因此它支持的语言为Python。
场景:我是Windows10系统,我的需求是在远程桌面的机器能测试安卓手机上的应用,在能与安卓手机直连的物理机上和远程桌面的机器上都安装上ADB,安卓手机和物理机以及远程机器都是在一个局域网内,如果你是直接物理机测试,那么以下对远程机器做的操作都放到你的物理机上做
官方文档要求:
2. 等待安装完成之后,打开cmd窗口输入python回车,出现以下界面表示安装成功
在物理机和远程桌面的机器上都安装上ADB(如果你只是使用物理机测试,那就只安装在物理机)
Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
Mac版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip
1. 下载ADB 解压之后把解压路径放到系统变量(path)里面去
2. 命令行窗口输入adb,出现以下信息说明安装成功
1. 安卓手机进入开发者模式,我的手机是在关于手机里面连续点击版本号七次就能进入开发者模式了
2. 点进安卓手机的开发人员选项,打开以下选项
3. 将手机和物理机直连,如果有弹出选项的话则选择仅充电
4. 打开物理机的cmd窗口,输入adb devices命令
5. 输入以上命令回车之后,手机会弹出以下窗口, 点击确定(如果已经和物理机连接上了,但是一直没有这个窗口弹出,可以重启一下手机再试)
6. 再次输入adb devices 就会发现已经连接
7. 输入adb tcpip 5555 该命令是启动手机的网络调试,端口号是5555(你也可以用别的端口号)
8. 接下来就可以使用安卓手机IP地址+端口号直接进行无线连接了,以管理员方式运行远程机器的cmd窗口(要以管理员方式运行,否则可能连不上),输入adb connect ip:端口号
我的手机ip是192.168.8.155 端口号是5555,所以我执行以下命令连接,出现already connected 表示连接成功
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=“元素定位表达式”)
所以可以使用文本来定位饥荒吧并点击
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。