首先就是选择工具使用python语言和uiautomator,然后就是各种环境配置各种遇见错误,容我一一举例吧
1安装python pip
2.安装uiautomator2,命令 pip install --pre -U uiautomator2
3/接下来就是集成开发工具py cha r m,创建项目 新建python,导入uiautomator2,这里我遇到的问题是怎么都导入不了,总是提示没有这个模块,最后的解决办法也只是重新安装py cha r m,社区版pycharm-community-2018.dmg,新建项目的时候如下图,如此发现导入uiautomator2成功了
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.csdn.net/jffhy2017/article/details/69220719/
我的理解其实这就是脚本,appium ,strap,设备四者直接的关系,首先appium启动就会一个服务端也是一个中转站,appium会向设备仍一个包appiumbootstrap.jar,这个包会在设备上新建一个socket服务打开4724端口,接下来 脚本向appium发送指令,appium根据脚本指令利用strap新建的4724端口利用strap操作设备,如滑动点击等,然后strap将响应返回给appium,appium再将去响应脚本
使用真机或夜神模拟器,adb devices 找不到夜神模拟器解决方法:https://blog.csdn.net/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页面元素
解决方案:
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
解决方案:重启手机即可
学习中的我遇到问题会及时更新和大家分享哦~~~