背景
我们公司有台测试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