u2是我对uiautomator2的简称。是uiautomator的升级版本。各大网站有很多介绍了。简单介绍重点:
1,基于 Instrumentation, 可以获取应用Context,可以使用Android服务及接口。
2,2.0基于 Junit4,测试用例无需继承于任何父类,方法名不限,使用Annotation进行.
3,引入appium-uiautomator2-server,目的是为了替换掉之前的UiAutomator+Bootstrap模式.
它获取toast的API大家都喜欢0!
为什么要实用U2?看完这篇文章,你心中自然会有答案。
不废话,直接上干货。
以下分为两个部分:1,环境搭建 2,hello world
一,环境搭建
首先说明一点,我是基于win10环境的。(win10很好用,不知道为什么网上那么多人吐槽)
1,jdk的安装
这个原本是打算详细说的,但是jdk8, jdk11的略有不同。小白还是百度一下jdk的安装吧!
jdk8系列点击安装完成后,环境变量中新建JAVA_HOME,CLASSPATH,然后添加到path变量中。完成之后不要忘记到cmd里面验证一下:java -version
2,adb配置
不多说了,一切都在下图中:
![c7289fb77e479870e86bf59e69887cd4.png](https://img-blog.csdnimg.cn/img_convert/c7289fb77e479870e86bf59e69887cd4.png)
提供一个下载地址:
Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载www.androiddevtools.cn![fc45fde374b2e53ddcb69b7a245980cb.png](https://img-blog.csdnimg.cn/img_convert/fc45fde374b2e53ddcb69b7a245980cb.png)
再附上一个图吧,主要是照顾一些新手(当年自己也很头疼)。
关于adb的配置,网上有许多乱七八糟的说法,操作起来,对于新手来说挺烦的。特别是你用appium的话,adb的版本还要和appium里面的一致。
![e7678667b75a02ede8906bdb24869810.png](https://img-blog.csdnimg.cn/img_convert/e7678667b75a02ede8906bdb24869810.png)
下载后放在一个位置(你随意),然后如上图配置环境变量即可。
惯例:cmd里面验证下:输入abd
![ec6e2b6e400be963c0a7458e5b6e18f9.png](https://img-blog.csdnimg.cn/img_convert/ec6e2b6e400be963c0a7458e5b6e18f9.png)
以上都是运行环境所必须的。
接下来是u2及python的安装。
1,先安装个python(python简单快捷优雅,测试首选!Java是最讨厌的开发语言之一)
https://www.python.org/www.python.org安装过程中记得勾选将pip添加到path中(安装时,慢点,仔细看,总会看到这些字眼的,勾上即可)
2,安装u2的依赖项:pillow,pbr
还是在cmd中进行安装:
pip install pillow, pip install pbr
如果安装不了,使用pip3 install xxx试试看。pypi资源不大好,很慢
3,安装u2
pip install uiatuomator2
4,初始化。
u2在正式运行前,是需要连接手机初始化的。
还是在cmd中输入:python -m uiautomator2 init
5,元素定位,就是如何识别APP上的元素及属性
安装:pip install weditor
启动方式: python -m weditor,然后会自动弹出浏览器打开网址
输入手机的ip,点击连接即可,如下图。
![dde523e71bbec323374e78e2409f7c00.png](https://img-blog.csdnimg.cn/img_convert/dde523e71bbec323374e78e2409f7c00.png)
至此,一个基础的基于u2的Android自动化运行环境就搭建好了!
除去啰嗦的话之外,其实操作起来就那么几步。。。比appium好多了。至少安装完不会有啥问题。
tips:如果你是初学者的话,还是建议仔细看一看吧!
二,hello world
起这个名字是基于IT界的传统--环境弄好之后总得试一下吧!
U2连接设备的两种方式:
1,通过手机设备号进行连接(cmd中输入adb devices获得)
2,通过手机ip进行连接。手机和电脑必须在同一局域网内
![8963cc2acebfea2142af4b76047661d2.png](https://img-blog.csdnimg.cn/img_convert/8963cc2acebfea2142af4b76047661d2.png)
启动/停止APP:
![f0139f4ec32494f7ed595c64fedd9181.png](https://img-blog.csdnimg.cn/img_convert/f0139f4ec32494f7ed595c64fedd9181.png)
包名获取方法:
首先要运行被测的app
方法一:
![8b5f1ad4d28abea7e5e662036b968fcc.png](https://img-blog.csdnimg.cn/img_convert/8b5f1ad4d28abea7e5e662036b968fcc.png)
方法二:
使用adb shell dumpsys window | findstr mCurrentFocus 命令,可以查看当前启动中的应用信息
![f20a7f4646900f2b4d0150f4f64ee3f7.png](https://img-blog.csdnimg.cn/img_convert/f20a7f4646900f2b4d0150f4f64ee3f7.png)
demo:
import uiautomator2 as u2
d2=u2.connect("721QEBR923Q49")
d2.app_start("http://com.xx.xxx")
dev_info = d2.device_info
width = dev_info["display"]["width"] # 获取屏幕的宽度
height = dev_info["display"]['height'] # 获取屏幕的高度
try:
#self.driver(text="取消").click()
d2(textContained="允许").click()
d2(textContained="允许").click()
print("授权成功")
except:
print("无需授权")
try:
d2(resourceId="com.xx.xxx:id/tv_skip").click()
except:
d2.swipe(width / 2, height / 2, 0, height / 2)
是不是很简单!
U2操作元素的api是很简单但又很丰富的。自行查阅去吧!