python uiautomator2移动端自动化测试踩坑日记

本文记录了使用Python的uiautomator2进行移动端自动化测试过程中遇到的各类问题及解决方法,包括环境配置、工具安装、元素获取、appium的使用以及H5页面元素定位等常见问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先就是选择工具使用python语言和uiautomator,然后就是各种环境配置各种遇见错误,容我一一举例吧

1安装python pip 

2.安装uiautomator2,命令 pip install --pre -U uiautomator2

备注(只有python 3.5.0 以上才支持 atx  安装(python -m uiautomator2 init)

 

IOS的元素获取可以使用weditor,期间遇到的问题是weditor启动后点击connect ,只能找到python2找不到python3,因为weditor是不支持2的,只支持3,:问题解决:首先用pyenv 安装python3,然后通过命令将python3设置为系统默认python版本  pyenv global 3.8.0,然后记住安装weditor使用pip3 install weditor ,如果有版本那就卸载还再次安装详细参考:https://zhuanlan.zhihu.com/p/108633133

3/接下来就是集成开发工具py cha r m,创建项目 新建python,导入uiautomator2,这里我遇到的问题是怎么都导入不了,总是提示没有这个模块,最后的解决办法也只是重新安装py cha r m,社区版pycharm-community-2018.dmg,新建项目的时候如下图,如此发现导入uiautomator2成功了////导入失败还有一种可能:系统安装了python3和2,命令安装默认是3,要用pip2 install --pre -U uiautomator2安装2的才行,让后配置环境变量

4这个时候就开始要获取元素准备开始写脚本了,选用的工具是uiautomatorviewer,但是可怜的我总是会遇到很多问题,点击sdk下的uiautomatorviewer报错,提示这个dirname :not fund 反正是各种not fund,原因是什么呢,就是我的path变量有问题,Mac的path变量结尾应该是$PATH,我就只能把这个错的path变量直接删掉了,因为也确实没用,要是有用修改为正确也可以吧

uiautomatorviewer 启动的问题解决 了,但是启动后获取元素的时候麻烦又来了,提示Unable to connect to adb,

百度后找到解决方法了:打开uiautomatorviewer.bat,找到uiautomatorviewer.bat文件最后一行:

exec "${javaCmd}" $javaOpts -Djava.ext.dirs="$frameworkdir" -Dcom.android.uiautomator.bindir="$progdir" -jar "$jarpath" "$@"

将其中的binddir=%prog_dir%修改为SDK的platform-tools所在路径。

修改后的最后一行为:exec "${javaCmd}" $javaOpts -Djava.ext.dirs="$frameworkdir" -Dcom.android.uiautomator.bindir="/Users/****/sdk/platform-tools" -jar "$jarpath" "$@"

到这里还不算完事:

再次获取元素的时候还是报错:uiautomatorviewer Error obtaining UI hierarchy

百度一番好多方法,终于找到一个超级好使的法子,粗暴又万能的重启手机,再次获取元素的时候,问题就这么好了

UI automator viewer 查看path路径请参考:https://www.jianshu.com/p/14db2af600fb

 

 

5. 接下来就是安装appium了,安装步骤和方法就看这个链接吧https://testerhome.com/topics/1225

我曾经一度疑惑一点为什么要用到appium 后来才明白,详细两件见https://blog.youkuaiyun.com/jffhy2017/article/details/69220719/

我的理解其实这就是脚本,appium ,strap,设备四者直接的关系,首先appium启动就会一个服务端也是一个中转站,appium会向设备仍一个包appiumbootstrap.jar,这个包会在设备上新建一个socket服务打开4724端口,接下来 脚本向appium发送指令,appium根据脚本指令利用strap新建的4724端口利用strap操作设备,如滑动点击等,然后strap将响应返回给appium,appium再将去响应脚本

 

 使用真机或夜神模拟器,adb devices 找不到夜神模拟器解决方法:https://blog.youkuaiyun.com/cz9025/article/details/78665223

 

6   以为什么都准备好可以开始写脚本了吧,问题来了,写脚本当然开始了,首先我需要获取测试app的包名和当前的activity,我执行的 adb 命令是

adb shell dumpsys window | findstr mCurrentFocus

但是一直提示我-bash: findstr: command not found

原因是我用的Mac这个这个命令是window下的,需要改下命令为adb shell dumpsys window | grep mCurrentFocus

 真是无处不坑啊

 

7,脚本的第一步就是启动app,很多教程上会有这么一句

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

切记不可照搬,需要将localhost改为127.0.0.1

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

8,启动获取app元素的weditor. :python -mweditor

9,python脚本运行报错:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

解决方案:添加以下代码

import sys

reload(sys)

sys.setdefaultencoding('utf8')

10,weditor和uiautomatorviewer 均无法定位到H5页面元素( 安装weditor pip install weditor )

 解决方案:

1,电脑和手机里都要安装谷歌浏览器,2,能翻墙,为此我特意花钱买了一个VPN,3,如果是公司内的app,需要开发人员在app的activity清单文件里面添加android:exported="true",如此打出来的包才能抓取到H5页面元素,但是如果是微信公众号一类的H5页面就简单了,在一个对话框李输入debugx5.qq.com,点击打开进入信息下如下图

到此设置完毕后回到谷歌浏览器

4,谷歌浏览器输入chrome://inspect/#devices,如图操作,

如果没有翻墙的话,点击完inspect就会是空白页如下图

但是要是有了翻墙就是下图了

 

11,启动appium 服务,点击运行脚本,提示[UiAutomator] UiAutomator exited unexpectedly with code 255, signal null

解决方案:重启手机即可

学习中的我遇到问题会及时更新和大家分享哦~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值