ATX openatx/uiautomator2 的插件机制

codeskyblue · 2018年09月09日 · 最后由 剪烛 回复于 2021年09月15日 · 3417 次阅读

背景

openatx/uiautomator2提供了 Android 原生应用的自动化测试功能,经过了很长时间的发展,提供的基础功能已经足够多,但是依然还有很多特殊的需求不能直接满足,需要用户再多封装一下才可以。
为了更方便的使用 uiautomator2,这里引入的插件机制。

不了解 openatx/uiautomator2 的可以先看一下这篇文章ATX-给大家介绍一下 uiautomator2 这个项目

从零开始教你写插件

一般的 app 刚启动的时候会有引导界面,需要不停的向左滑动才可以,下面我们就来实现这个功能。

左滑功能

在没有插件前

import uiautomator2 as u2

def swipe_left(d):
    d.swipe(0.9, 0.5, 0.1, 0.5) # swipe x(90%) -> x(10%)

d = u2.connect()
swipe_left(d)

使用插件方式重写

import uiautomator2 as u2

class Swipe(object):
    def __init__(self, d):
        self.d = d

    def left(self):
        self.d.swipe(0.9, 0.5, 0.1, 0.5)

u2.plugin_register("swipe", Swipe)

d = u2.connect()
d.ext_swipe.left()

是不是感觉使用插件的方式代码反而变长了,然而这种方式带来的改进是,所有的功能都能全部通过d这个实例来访问,加上插件的代码可以转移到其他文件中,整个代码就会变得很整洁。

之后如果有其他的需求,只需要扩充插件的函数就可以实现

d.ext_swipe.right() # 右滑
d.ext_swipe.up() # 上滑
d.ext_swipe.down() # 下滑

官方参考例子:
目前这个库自带了一个采集性能的插件,欢迎围观perf plugin

关于插件更详细的使用方法,参考这里https://github.com/openatx/uiautomator2#plugin-beta

想到的但是还没实现的插件

  • 录屏 d.ext_screenrecord.start(); .... ; d.ext_screenrecord.stop()
  • 采集 logcat 的 d.ext_logcat.start(output='logcat.txt'); ... ; d.ext_logcat.stop()
  • 控制 wifi 开关 d.ext_wifi.on(); d.ext_wifi.off()
  • webview 的插件
  • u3d, cocos 的插件
  • 生成测试报告的插件

后记

一个人的精力毕竟有限,不可能把一个工具打造的特别完美, 但是有了插件就不同了,很多人一起贡献,感觉即使再难实现的功能也能用插件堆出来
欢迎留言讨论 _^

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 11 条回复 时间 点赞

👍 前排留名,强烈支持

到哪里可以看到目前支持的插件?

Elsie 回复

在等回帖告诉我谁写插件了

codeskyblue 回复

可能需要一个 ATX-plugin 社区

程明远 回复

等先出来一个再说吧,我自己写的不算

codeskyblue 专栏文章:2018年 终总结 中提及了此贴 02月18日 10:26

u2 下无这个函数呢 plugin_register

花小田 回复

后来发现没啥子用途,被我删掉了

codeskyblue 回复

为啥没啥用途啊?插件注册不需要了吗?

Perf 插件还挺有用的😀

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册