51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2742|回复: 0
打印 上一主题 下一主题

[求助] uiautomator2 使用Python测试 Android应用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-1 15:47:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
介绍

uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

1、测试脚本只能使用Java语言。

2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试。


安装

安装uiautomator2

  1. pip install --pre uiautomator2

  2. pip install pillow
复制代码
初始化

部署相关的守护进程。

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

  1. python -m uiautomator2 init
复制代码

安装过程如下:

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

配置手机设备参数:

有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。

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

测试

编写以下脚本进行验证:

  1. import uiautomator2 as u2

  2. d = u2.connect('192.168.31.234')
  3. print(d.info)
复制代码

运行结果:

  1. {'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、安装:

  1. pip install --pre --upgrade weditor
复制代码

安装过程:

2、使用:

  1. python3 -m weditor
复制代码

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


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

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


编写测试脚本

这里针对魅族社区App进行测试。

  1. import uiautomator2 as u2
  2. from time import sleep

  3. d = u2.connect('192.168.31.234')

  4. # 启动App
  5. d.app_start("com.meizu.mzbbs")

  6. # 搜索
  7. d(resourceId="com.meizu.mzbbs:id/j0").click()

  8. # 输入关键字
  9. d(resourceId="com.meizu.mzbbs:id/p9").set_text("flyme")

  10. # 搜索按钮
  11. d(resourceId="com.meizu.mzbbs:id/tp").click()

  12. sleep(2)

  13. # 停止app
  14. 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简单得多。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 06:01 , Processed in 0.064625 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表