题记: 以前一直用APPium直到用安卓9.0 发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度好久解决方法都不能够,偶然间看见有人推荐:uiautomator2 就尝试使用 发现比appium要简单一些; 下面文字主要来自虫师的博客html
1、Uiautomator2原理介绍
1.uiautomator2是一个可使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库能够获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操做,目前仅支持android平台的原生应用测试,https://github.com/openatx/uiautomator2。但有两个缺点:
测试脚本只能使用Java语言。
测试脚本必须每次被上传到设备上运行。
2.工做原理
分为两个部分:
PC上的python端:运行脚本,并向系统设备发送http请求
移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
python
2、安装uiautomator2android
pip install --pre uiautomator2git
pip install pillow github
3、初始化小程序
部署相关的守护进程。微信小程序
电脑链接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所须要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch浏览器
python -m uiautomator2 init
安装完成,设备上会多一个uiautomator的应用。微信
配置手机设备参数:app
有两种方法,一种是经过WIFI,另外一种是经过USB数据线将手机连接电脑。 (我是经过USB这个方法,按照后手机会多一个ATX小汽车图标的软件)
WiFi链接更方便一点,须要保持PC和手机使用的一个WIFI,查看手机链接WIFI的IP地址。
咱们能够借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式链接PC,我前面使用的是WIFI链接进行链接的。因此,openatx提供了另一个工具weditor 来解决这个问题。
GitHub地址:https://github.com/openatx/weditor
一、安装:
pip install --pre --upgrade weditor
二、使用:
python3 -m weditor
默认会经过浏览器打开页面:http://atx.open.netease.com/
下面这个跟用uiautomatorviewer定位元素是同样的 并且多了xpath的定位语句,用起来更方便,
在页面左上角选择Android,输入设备IP(192.168.31.234),点击Connect按钮。
当咱们操做完手机后,能够点击“Reload”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还能够帮咱们生成代码。总之,你研究一下就会用了。
这里针对魅族社区App进行测试。
import uiautomator2 as u2 from time import sleep d = u2.connect('192.168.31.234') # 启动App d.app_start("com.meizu.mzbbs") # 搜索 d(resourceId="com.meizu.mzbbs:id/j0").click() # 输入关键字 d(resourceId="com.meizu.mzbbs:id/p9").set_text("flyme") # 搜索按钮 d(resourceId="com.meizu.mzbbs:id/tp").click() sleep(2) # 中止app d.app_stop("com.meizu.mzbbs")
app_start()和app_stop()用于启动和中止应用。
经常使用的定位方式:
ResourceId定位:
d(resourceId="com.meizu.mzbbs:id/tp").click()
Text定位:
d(text="精选").click()
Description定位:
d(description="..").click()
ClassName定位:
d(className="android.widget.TextView").click()
小结:其实关注该项目已经好几个月了,目前该项目已经趋于稳定,整个测试环境的搭建过程也要比Appium简单得多。
我是练习分割线
在尝试对APP进行登陆的时候发现一个问题,在用APPium 是能够隐藏键盘进行输入, 用uiautomator2 发现不能够 ,一直卡主键盘无法办收起来提交失败;
最后尝试用物理返回,成功解决,
下面尝试用uiautomator2 打开微信小程序并进行受权 代码以下:
#连接设备 driver = u2.connect_usb("XXXX") #打开APP driver.app_start("com.tencent.mm") time.sleep(3) #下拉操做 driver.swipe(0.513,0.399, 0.513,0.6) #经过文本定位打开小程序 driver(text="XX").click()
打开APP,并进行登陆:
#定位driver
driver = u2.connect_usb("L081")
#启动app driver.app_start("com.XXX.XXXX")
#经过id定位输入框输入帐号密码 driver(resourceId="com.XXX.XXXX:id/login_username_et").set_text("test") driver(resourceId="com.XXX.XXXX:id/login_password_et").send_keys("123456") #经过物理返回,收齐键盘 driver.press("back") time.sleep(2) #点击登陆 driver(resourceId="com.XXX.XXXX:id/login_commit_btn").click()
疑问:在校验还没涉及 若是有朋友涉及 请不吝赐教,谢谢
下面是原文连接和一些用法介绍:
原文:
https://www.cnblogs.com/fnng/p/8486863.html
用法:
https://blog.csdn.net/ricky_yangrui/article/details/81415365