名词介绍

robot framework:以 Python 开发的一套关键字驱动测试框架,可支持 appium、selenium、request 等库进行 ui、接口测试。
https://robotframework.org/

appium library : 以 Python 封装的 robot framework 库,提供已封装的关键字在 robot framework 中使用。
https://pypi.org/project/robotframework-appiumlibrary/

uiautomator2: 以 Python 开发的用以 Android ui 自动化测试的框架。
https://testerhome.com/topics/10881

本文记录在 robot framework 中将 uiautomator2 封装为新的 library 库以替代 appiumlibrary 的思路和过程。

背景

现在的团队使用 robot framework + appium 的框架进行移动端的 UI 自动化测试。使用过程中遇到以下问题:
appium desktop 软件使用体验问题:

在写了几十条用例之后,终于无法忍受上述问题给工作效率带来的阻碍,开始想替代方案。

现状和改造限制

在之前的项目中曾经使用过 用例平台管理用例 + uiautomator 2 执行自动化测试 + weditor 查看元素编写用例的方案,于是第一时间想用这一套框架来替代。
但是目前项目已经有一定的累积,因此无法直接替代:

改造方向

既然不能完全推倒现有的方案,只能考虑改造。
现有方案:

改造思路

1. appium library: 基于 appium 封装的一个 robot framework 库。

如果要改造,思路如下:

从这个方向扩展,得出以下的方案:

2. appium inspector : 替换为 weditor 。

既然已经替换了 appium library 作为执行,那么 appium inspector 也可以替换了。目标是 weditor。 这只需安装对应的 Python 库即可。

改造实施

1. 封装 u2 库。

按 appiumlibrary 中对应关键字的实现思路,在新的 u2 库中进行改造。大致包括以下常用的关键字,改造耗时 1 天:

部分关键字封装举例:
init: 在调用 u2 库时确保可以连接到手机

def __init__(self):
    try: 
        print(self.u)
    expect:
        self.u = uiautomator2.connect(device)

start app:

def start_app(self, packageName):
      self.u.start_app(packageName, stop=False)

find element: 这是重点,需要根据不同的 locator 方法查找元素

def find_element(self,locator,timeout=30):
      method, locator = locator.split('=')    # locator 的统一格式: id=test1, class=class1, 等待
      if method== 'id':
          find element by id
      ...   

click element:

def click_element(self,locator,timeout=30):
      self.find_element(self.locator,timeout=timeout).click()

改造效果

改造后的好处:

待优化:


↙↙↙阅读原文可查看相关链接,并与作者交流