• csdn涨薪技术之UI⾃动化⼯具: UiAutomator2


    【文章末尾给大家留下了大量的福利】

    1、 导读

    做过Android自动化测试的同学想必都知道,最开始用的UiAutomator是Google提供的⽤来做安卓⾃动化测试的⼀个Java库,基于Accessibility服务,功能强⼤,但仅⽀持Java语⾔,并原生框架一开始并不⽀持Python。

    后面一些Python技术爱好者,实在看不过去了,撸起袖子开发了一款UiAutomator Python版本,项目地址:

    https://github.com/xiaocong/uiautomator
    

    安装及基本使用:

    1. $ pip install uiautomator
    2. from uiautomator import device as d
    3. d.screen.on()
    4. d(text="Clock").click()

    2、UiAutomator2

    当然,今天介绍的主角是另外一框架框:UiAutomator2, 有人说UiAutomator2是不是UiAutomator的升级版本,功能确实是升级,但两个框架其实并没有任何直接关系,甚至根本不是一波人开发的。

    UiAutomator2框架是阿里的一位大神杰作。

    简单介绍一下:

    UiAutomator2是⼀个开源的⾃动化测试⼯具,提供了⼀系列的Python API,⽅便测试⼈员⽤Python编写⾃动化测试脚本。

    框架原理图:

    项目地址:

    https://github.com/openatx/uiautomator2
    

    随着近几年UiAutomator2框架的不断迭代,功能也越发强大了,更多详细功能和介绍建议读者去项目官方地址查阅。

    快速开始:

    先准备一台开启了开发者选项的安卓手机,连接上电脑,确保执行adb devices可以看到连接上的设备。

    安装uiautomator2

    pip3 install -U uiautomator2 
    

    运行python3 -m uiautomator2 init安装包含httprpc服务的apk到手机.

    命令行运行python打开python交互窗口。然后将下面的命令输入到窗口中。

    1. import uiautomator2 as u2
    2. d = u2.connect() # connect to device
    3. print(d.info)

    3、UiAutomator2 特色功能

    在Android自动化测试过程中,经常会遇到一些非期望需要操作的弹框,一旦出现这些非预期弹框,势必对自动化执行稳定带来影响,今天要重点介绍的就是UIAutomator2中watcher(观察者)的功能,或者称之为监听者模式。

    本质上watcher的设计思路主要是为了解决一些弹窗或者 确认框诸如此类问题。

    具体watcher又该怎么用?

    1、官方示例:

    1. # 常用写法,注册匿名监控
    2. d.watcher.when("安装").click()
    3. # 注册名为ANR的监控,当出现ANR和Force Close时,点击Force Close
    4. d.watcher("ANR").when(xpath="ANR").when("Force Close").click()

    2、用法说明:

    1. d.watcher("WATCHER_NAME").when(text="确认").click(text="确认")
    2. d.watcher("WATCHER_NAME2").when(text="OK").when(text="Wait").press("back""home")

    解释:

    • 第一句表示:注册一个名字为“WATCHER_NAME”的watcher,当存在UiSelector满足“text='确认'”的时候,执行点击操作

    • 第二句表示:注册一个名字为“WATCHER_NAME2”的watcher,当满足两个条件时,依次按back与home键。

    3、回调示例

    1. d.watcher.when("抢红包").press("back")
    2. d.watcher.when("//*[@text = 'Out of memory']").call(lambda d: d.shell('am force-stop com.im.qq'))
    3. # 回调说明
    4. def click_callback(d: u2.Device):
    5.     d.xpath("确定").click() # 在回调中调用不会再次触发watcher
    6. d.xpath("继续").click() # 使用d.xpath检查元素的时候,会触发watcher(目前最多触发5次)

    需要注意的是,即便完成watcher注册了,并不代表已经生效,需要手动开启它,有两种方法:

    1. # 方式一:启动所有的观察者,并一直运行在手机后台
    2. d.watchers.watched = True
    3. # 方式二:强制运行所有监控
    4. d.watchers.run()

    其他常用Watcher监控命令:

    1. # 移除ANR的监控
    2. d.watcher.remove("ANR")
    3. # 移除所有的监控
    4. d.watcher.remove()
    5. # 开始后台监控
    6. d.watcher.start()
    7. d.watcher.start(2.0# 默认监控间隔2.0s
    8. # 强制运行所有监控
    9. d.watcher.run()
    10. # 停止监控
    11. d.watcher.stop()
    12. # 停止并移除所有的监控,常用于初始化
    13. d.watcher.reset()
    14. # 查看当前所有watcher
    15. d.watchers
    16. # 判断 某个/所有观察者中的某个 是否已经被触发过
    17. d.watcher("watcher_name").triggered
    18. d.watchers.triggered

    当你使用方式一时,在你不想使用它的时候,需要使用d.watchers.watched = False手动关闭;当然,你也可以使用下方的remove方法移除某个watcher,如此它便不会再生效,使用d.watchers.run(),则与方法一不同,它是在这条命令执行的瞬时启动一次,结束后便不会再触发。

    4、案例模拟

    本案例,假设自动模拟打电话、挂电话操作,如果是使用d.watchers.watched = True,可以先执行脚本,再进行呼叫。

    1. import uiautomator2 as u2
    2.  
    3. # 连接被叫设备
    4. d = u2.connect('192.168.1.105:62001')
    5.  
    6. # 注册一个名字为"Phone"的watcher,当存在UiSelector的description="拒绝"时,点击
    7. d.watcher("Phone").when(description="拒绝").click()
    8. # 启动前,查看Phone是否已经注册且触发过
    9. print("Triggered Before:", d.watcher("Phone").triggered)
    10.  
    11. # 后台启动,持续监控
    12. d.watchers.watched = True
    13. # 查看当前已经注册的watchers
    14. print("Watchers:", d.watchers)
    15. # 启动后,查看Phone是否已经注册且触发过
    16. print("Triggered After:", d.watcher("Phone").triggered)
    17.  
    18. # 重置watchers的triggered状态
    19. d.watchers.reset()
    20.  
    21. # 移除Phone这个watcher
    22. d.watcher("Phone").remove()
    23.  
    24. # 移除后,查看当前已经注册的watchers
    25. print("Watchers:", d.watchers)
    26.  

    也可以将启动方式改成d.watchers.run()如果是使用d.watchers.run(),则需要在电话已经处于呼叫的过程中,触发脚本,具体效果,可自行运行尝试。

     重点:学习资料学习当然离不开资料,这里当然也给你们准备了600G的学习资料

    需要的先关注再私我关键字【000】免费获取哦 注意关键字是:000

    疑惑:为什么要先关注呢?   回:因为没关注的话私信回了你看不到

    项目实战

    app项目,银行项目,医药项目,电商,金融

    大型电商项目

    全套软件测试自动化测试教学视频

    300G教程资料下载【视频教程+PPT+项目源码】

    全套软件测试自动化测试大厂面经

    python自动化测试++全套模板+性能测试

    听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!

  • 相关阅读:
    为什么我的k8s的master节点和node节点的状态都是notready呢
    解密高性能查询!小米亲授:如何轻松查出1000条数据的后十条前7条?
    【Java基础】成员变量和局部变量及封装
    【EI会议征稿】第八届先进能源科学与自动化国际研讨会(AESA 2024)
    【Revit二次开发】事务和事务处理(Transaction and FailureHandlingOptions)
    Linux企业应用——Docker(一)之初步了解Docker以及Docker的安装
    分布式与一致性协议之CAP(三)
    熔断原理分析与源码解读
    腾讯云服务器CVM和轻量应用服务器区别全方位对比
    【C语言】2.数组与指针
  • 原文地址:https://blog.csdn.net/csdnchengxi/article/details/125875900