Uiautomator2使用Python测试Android应用

发表于:2018-5-15 10:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:虫师    来源:博客园

  GitHub地址: https://github.com/openatx/uiautomator2
  介绍
  uiautomator2 是一个可以使用PythonAndroid设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:
  1、测试脚本只能使用Java语言。
  2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试。
  安装
  安装uiautomator2
  pip install --pre uiautomator2
  pip install pillow
  初始化
  部署相关的守护进程。
  电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch
  python -m uiautomator2 init
  安装完成,设备上会多一个uiautomator的应用。
  配置手机设备参数:
  有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。
  WiFi连接更方便一点,需要保持PC和手机使用的一个WIFI,查看手机连接WIFI的IP地址。
  测试
  编写以下脚本进行验证:
  import uiautomator2 as u2
  d = u2.connect('192.168.31.234')
  print(d.info)
  运行结果:
  {'currentPackageName': 'com.meizu.flyme.launcher', 'displayHeight': 1920, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 1080, 'productName': 'meizu_PRO5', 'screenOn': True, 'sdkInt': 24, 'naturalOrientation': True}
  定位元素:
  我们可以借助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/
  在页面左上角选择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简单得多。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号