基于ATOMac框架测试Mac系统应用

2022-03-24 15:56:37 浏览数 (1)

背景

我们公司有台测试mac笔记本,需要长时间登录qq.但是由于一些异常问题,导致这个qq经常掉线.所以想写一个小脚本来定时自动化登录qq.

最开始的想法是使用appium,但是看了官方文档,也没找到可入手的demo.

某天无意中看了一篇爱奇艺mac应用自动化帖子(原帖地址找不到了),提到了ATOMac框架,打算尝试使用下.

ATOMac简介

ATOMacc是一个支持在mac上做自动化的python库,GitHub地址如下:

代码语言:javascript复制
https://github.com/pyatom/pyatom

从介绍上来看是一个python类库,可以操作mac os系统

安装

Python3

代码语言:javascript复制
pip3 install git https://github.com/pyatom/pyatom/

查看bundle id

因为在mac系统上操作每一个应用,都需要bundle id,类似iOS自动化的bundle id.

需要如下几步,查找某个应用的bundle id,以QQ应用为例

在“应用程序”中找到QQ

右键点击“显示包内容”

打开“info.plist”

找到“CFBundleIdentifier”

设置权限

在“安全性与隐私”中辅助功能勾选“iterm和pycharm”

启动应用

代码语言:javascript复制
bundle_id = 'com.tencent.qq'
atomac.launchAppByBundleId(bundle_id)

获取应用信息

代码语言:javascript复制
ato = atomac.getAppRefByBundleId(bundle_id)
print(ato)

查找元素

定位元素工具

需要安装xcode工具,并且打开“Accessibility Inspector”

选择mac上的进程“qq”

选择“Inspector”按钮查询元素

元素属性对应说明

ATOMac库使用的元素属性均在其属性名(通过Accessibility Inspector查到)前面加AX,且首字母大写,如下所示

ATOMac

Accessibility Inspector

AXRole

Role

AXPosition

Position

AXRoleDescription

Type

AXValue

Value

获取当前windows

代码语言:javascript复制
window = automator.windows()[0]

元素定位

代码语言:javascript复制
#findFirstR,递归查找,返回第一个匹配的元素(当查找的元素Parent非标准窗口时使用)
dt = cur_win.findFirstR(AXRole='AXRadioButton', AXTitle='地图')

获取位置参数

代码语言:javascript复制
dt_position = dt.AXPosition
dt_size = dt.AXSize

操作鼠标

代码语言:javascript复制
dt.clickMouseButtonLeft(dt_position)

输入文本

代码语言:javascript复制
s1.sendKeys('7983')

空格

代码语言:javascript复制
s1.sendKeys([BACKSPACE])

回车

代码语言:javascript复制
s1.sendKeys([RETURN])

登录Mac的qq脚本

这一段脚本很简单,跟使用atx差不多.其实很多自动化框架的api方法都大同小异.

代码语言:javascript复制
def qq_login():

    atomac.launchAppByBundleId(bundle_id)
    ato = atomac.getAppRefByBundleId(bundle_id)
    sleep(5)

    cur_win = ato.windows()[0]

    dt_image = cur_win.findFirstR(AXRole='AXImage')
    attr = dt_image.getAttributes()

    dt_pwd = cur_win.findFirstR(AXRole='AXTextField',AXSubrole='AXSecureTextField')
    dt_pwd.sendKeys(pwd)

    dt_login = cur_win.findFirstR(AXRole='AXCheckBox')
    dt_login.sendKeys([RETURN])

    sleep(5)

    print('login success!')

结语

ATOMac比较使用测试mac上的应用,比如跨平台的electron应用.

ATOMac应该可以替代appium测试mac上的应用,appium在测试mac os系统在官方文档中资料有限.

ATOMac不需要启动服务,直接调用系统函数进行自动化,速度很快.

ATOMac也适用于写一些自动化运维小工具,比如自动化签到、自动化启动应用.

参考

官方文档

代码语言:javascript复制
https://pypi.org/project/atomic/0.7.2/

ATOMac - 基于Python的Mac应用Ui自动化库

代码语言:javascript复制
https://www.jianshu.com/p/a36cd892adc1

0 人点赞