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 查看元素编写用例的方案,于是第一时间想用这一套框架来替代。
但是目前项目已经有一定的累积,因此无法直接替代:
既然不能完全推倒现有的方案,只能考虑改造。
现有方案:
如果要改造,思路如下:
从这个方向扩展,得出以下的方案:
既然已经替换了 appium library 作为执行,那么 appium inspector 也可以替换了。目标是 weditor。 这只需安装对应的 Python 库即可。
按 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()
改造后的好处:
待优化: