背景

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

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

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

ATOMac 简介

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

https://github.com/pyatom/pyatom

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

安装

Python3

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”

启动应用

bundle_id = 'com.tencent.qq'
atomac.launchAppByBundleId(bundle_id)

获取应用信息

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

window = automator.windows()[0]

元素定位

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

获取位置参数

dt_position = dt.AXPosition
dt_size = dt.AXSize

操作鼠标

dt.clickMouseButtonLeft(dt_position)

输入文本

s1.sendKeys('7983')

空格

s1.sendKeys([BACKSPACE])

回车

s1.sendKeys([RETURN])

登录 Mac 的 qq 脚本

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

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 也适用于写一些自动化运维小工具,比如自动化签到、自动化启动应用.

参考

官方文档

https://pypi.org/project/atomic/0.7.2/

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

https://www.jianshu.com/p/a36cd892adc1


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