uiautomatorviewer的工具安装和使用

一、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的代码。

二、安装uiautomator2

pip install --pre uiautomator2
pip install pillow

三、初始化

部署相关的守护进程。

电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch

python -m uiautomator2 init

安装完成,设备上会多一个uiautomator的应用。

配置手机设备参数:

有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。 (我是通过USB这个方法,按照后手机会多一个ATX小汽车图标的软件)

WiFi连接更方便一点,需要保持PC和手机使用的一个WIFI,查看手机连接WIFI的IP地址。

定位元素:

我们可以借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式连接PC,我前面使用的是WIFI连接进行连接的。所以,openatx提供了另外一个工具weditor 来解决这个问题。

GitHub地址:https://github.com/openatx/weditor

1、安装:

pip install --pre --upgrade weditor

2、使用:

python3 -m weditor

默认会通过浏览器打开页面:http://atx.open.netease.com/

下面这个跟用uiautomatorviewer定位元素是一样的 而且多了xpath的定位语句,用起来更方便,

在页面左上角选择Android,输入设备IP(192.168.31.234),点击Connect按钮。

当我们操作完手机后,可以点击“Reload”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还可以帮我们生成代码。总之,你研究一下就会用了。

编写测试脚本 这里参考怎么去定位元素,在定位元素和启动APP 相对比APPium 要简单很多 这里针对魅族社区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)
# 停止
appd.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()
(0)

相关推荐

  • Appium+python自动化21-DesiredCapabilities详解

    前言 Appium Desired Capabilities里面配置的参数还是蛮多的,android和ios的又有很多不一样地方,另外还能起到浏览器,做wap的自动化测试. Desired Capab ...

  • 【自动化测试】自动化测试框架与工具

    文章目录 1)什么是自动化测试框架? 1.1 什么是框架? 1.2 什么是自动化测试框架? 1.2.1 优点: 1.2.2 框架的基本组件 1.需要配置文件管理: 2.业务逻辑代码和测试脚本分离 3. ...

  • TestOps自动化测试之Appium(Java)专项入门

    课程目标: 面对DevOps的热潮来临,TestOps作为测试运维也逐步萌芽.作为测试运维中非常重要的UI自动化测试,如何有效进行,配合持续集成&持续发布,构建自动化体系是很多TestOps急 ...

  • 我花了两周时间,为了体验appium AI定位元素

    当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如id.name.class等.那么通过AI的方式定位元素可能就不需要知道元素的属性,评价人对元素的判断来定位,比如,看到一个搜索框,直 ...

  • Python 自动化,Appium 凭什么使用 UiAutomator2?

    Python 自动化,Appium 凭什么使用 UiAutomator2?

  • appium+python自动化31-android_uiautomator定位

    前言 appium的前身就是封装android的uiautomator这个框架来的,所以uiautomator的一些定位方法也可以用 一. text 1.通过text文本定位语法 > new U ...

  • Appium+python自动化29-toast消息

    前言 appium1.5以后的版本才支持toast定位,并且 'automationName'得设置为'Uiautomator2',才能捕获到. 一. Supported Platforms 1.查看 ...

  • Android 谈谈自动化测试

    前言 最近,手头上的项目基本开发完成,优化也做的差不多了,本以为可以安心准备上线.然而老板却反映说测试人员发现 App 总会出现一些莫名的 bug. bug 来了,那就解决呗.但是这 bug 又贼迷, ...

  • 定位元素 | 白月黑羽教Python

    代码规则 点击这里,边看视频讲解,边学习以下内容 从示例代码,大家就可以发现,和Selenium Web自动化一样,要操作界面元素,必须先 定位(选择)元素. Appium是基于Selenium的,所 ...

  • Appium+python自动化9-SDK Manager

    前言 SDK Manager到有哪些东西是必须安装的呢? 一.SDK Manager 1.双击打开SDK Manager界面 2.Tools里面前三个是必须下载的 --Android SDK Tool ...

  • appium+python自动化32-android_uiautomator定位进阶版

    前言 上一盘介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python.于是本篇优化了定 ...