当前位置:首页 » 《随便一记》 » 正文

十分钟弄懂最快的APP自动化工具uiautomator2_生而为人,我很抱歉!你不努力,终将淘汰

13 人参与  2021年11月22日 14:03  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述
相信很多使用appium做过APP自动化的人都深有感触:

  • appium运行慢、时间长
  • uiautomatorviewer定位元素时得关掉appium server
  • 在低版本的appium上获取toast需要切换automationName

现在有一款自动化测试工具uiautomator2,它几乎完美的避免了以上的问题。简单易学,对新手足够友好。本次我们介绍一下这款工具,让你在十分钟之内能迅速掌握它

01、介绍

uiautomator2是uiautomator的升级版,uiautomator是Google开发的一款用来做安卓自动化测试的Java库,uiautomator2则是将uiautomator中的接口封装成了Python库。因此它支持的语言为Python

优点主要概括如下:

  • 环境搭建简单方便
  • 执行速度很快
  • UI元素定位便捷好用、可视化好
  • 获取toast非常简单

根据官方文档,要求:

  • Andorid版本 4.4+
  • Python版本 3.6+

02、环境部署

1、安装adb并配置环境变量

这里不做详述,网上的教程很多。安装完查看一下版本信息,能出现具体的版本号说明安装成功

在这里插入图片描述
2、安装python的uiautomator2库

命令:

pip install -U uiautomator2

在这里插入图片描述
3、安装atx-agent

这一步的目的是从github上下载atx-agent,推送到手机,作为服务端,因此先要保证adb devices能看到模拟器上的连接。这里开一台夜神模拟器作为演示

在这里插入图片描述
开始安装atx-agent,命令:

python-m uiautomator2 init

安装成功后,可以看到模拟器桌面出现一个小汽车图标,这个就是atx.apk

在这里插入图片描述

4、安装weditor

命令:

pip install -U weditor

weditor是基于浏览器的UI元素查看器,安装成功后我们做个演示

在这里插入图片描述
在命令行输入 weditor 会自动打开浏览器,在页面上输入模拟器的设备序列号,点击Connect,然后点击Dump Hierarchy刷新,可以看到模拟器的界面

在这里插入图片描述
打开百度贴吧,弹出隐私政策弹窗,点击UI查看器上的刷新按钮(当然你也可以打开实时,这样会自动刷新),鼠标选中同意,在右边就可以看到一些元素定位方式,如resourceId、Xpath等。是不是很方便,最方便的是它可以在运行的时候,同时开着weditor UI查看器

在这里插入图片描述

03、编写百度贴吧首页脚本

这里我们一步一步来,通过编写百度贴吧自动化测试的用例,来说明uiautomator2这个工具提供给我们的一些方法。为了使得代码更直观一点,这里就不使用PO模式了,直接把每一步写在一个模块中

1、先创建一个工程u2-autotest,然后在其下创建一个模块test_tieba.py

2、导入uiautomator2库,取个别名u2,然后使用u2的connect_usb()方法连接,这个方法的参数是设备序列号(可以通过adb devices获取)。连接成功后返回的device对象,我们取名为d,怎么检查有没有连接上?使用d.info能得到设备的基本信息,说明已经连接成功

在这里插入图片描述

3、启动指定的app,其语法是:

d.app_start(“指定的包名”)

怎么获取包名,可以打开app,然后打印d.info,得到的结果里的currentPackageName即是包名

在这里插入图片描述
4、然后点击百度贴吧,出现的第一个页面就是隐私政策页,打开weditor UI查看器,刷新后鼠标移动到同意按钮上,可以看到有两种定位方式可选择,一种是resourceId,一种是xpath,这里选择resourceId

在这里插入图片描述
在uiautomator2里resourceId的定位方式是这样的:

d(resourceId="元素定位表达式")

但是我们想想,能不能直接这样写

图片

答案是否定的,因为启动app后元素控件不会立即出现,因此需要等待时间,在uiautomator2中你可以用强制等待time.sleep(),也可以使用隐性等待implicitly_wait(),这和appium、selenium是一致的。

隐性等待的语法:

d.implicitly_wait(等待时长)  #单位是s

整理下代码,加上隐性等待时长10s,隐性等待只需要加一次,全局通用。

不管是等待第几个元素,等待时长都是10s,但是如果第一个元素是2s出现,第二个元素是5s出现,那么第一个元素实际等待时长只是2s,第二个只是5s,元素出现就会进行下一步操作,而不像强制等待一直要等够设置的时长。因此隐性等待相对比较节约时间

在这里插入图片描述
5、点击同意后,我们进入滑屏页面

图片

滑屏操作在uiautomator2中是swipe()方法,和appium类似,sx, ex和sy,ey分别表示起点和终点的坐标

d.swipe(sx, sy, ex, ey, 0.5)

那么起点和终点的坐标如何获取?

为了适应不同的分辨率,可以获取到屏幕的尺寸,然后分别乘以系数。

获取屏幕尺寸的语法是:

d.window_size()

我们看到首页滑动屏幕需要向左滑2次,因此可以写个for循环。这里有几点需要注意下:

  • 为了提高屏幕滑动的稳定性,需要加入强制等待,等待1s
  • 滑动距离尽量大点,比如x轴起点终点可以设置系数分别为0.9, 0.1,如果你设置为0.9,
    0.5,很可能会出现滑动距离太小,导致没有滑过去的情况
  • uiautomator2还提供了一个扩展的滑动功能,swipe_ext(),不需要坐标,只需提供方向如"left",“right”,“up”,“down”。经过试验,感觉不太稳定,因此还是采用常规的方法

在这里插入图片描述
6、滑动到最后一页,点击立即体验,可以进入首页

图片

这里可以使用resourceId或description或xpath,这里演示一下description的使用。

在uiautomator2中description定位的语法是:

d(description="元素定位表达式")

description也称为"content-desc",一般情况下它是唯一的

在这里插入图片描述
7、在首页,可以看到左上角有关注、推荐、话题、直播四个栏目,我们选择推荐作为断言的元素

在这里插入图片描述
看到推荐有文本值,那uiautomator2支持文本作为元素定位方式吗?

可以的

d(text="元素定位表达式")

然后可以使用get_text()方法拿到文本值,使用assert进行断言

在这里插入图片描述
8、一个用例运行完之后,需要停止app并清理环境,这里使用app_stop()和app_clear()方法

d.app_stop('指定的包名')

d.app_clear('指定的包名')

这时我们一个完整的用例就写完了,当然为了演示起见,我省略了很多,比如PO模式、pytest、日志、报告等等

在这里插入图片描述

04、uiautomator2和appium运行速度比较

这里我更改了下代码,使用uiautomator2和appium同时去执行百度贴吧搜索的用例,步骤一致,等待时长设置一致,看看相同的情况下哪个自动化工具更快点

图片

事实证明,相同情况下,uiautomator2耗时1分钟左右,而appium耗时1分钟16s,比uiautomator2慢了约16s。当然用例越多、流程越长,效果越明显

最后将uiautomator2的主要语法总结下,更多功能请阅读官方文档:http://8rr.co/Ngbk

在这里插入图片描述

在这里插入图片描述

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!推荐软件测试交流学习群:914172719 里面会分享一些资深架构师录制的视频录像


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…


点击全文阅读


本文链接:http://zhangshiyu.com/post/31177.html

测试  元素  等待  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1