ATOMacTest

一、缘 起

近期工作需要对一款Mac端应用实现常用功能的自动化操作,同事推荐ATOMac这款工具,这几天简单研究了下,同时也发现现网介绍ATOMac的资料非常有限,故在此记录下ATOMac的一些简单用法,仅供学习参考~

二、概 述

如标题,ATOMac是一个基于Python语言,通过Apple Accessibility API实现的Mac端应用Ui自动化控制库,下面是官方的说明:

We are pleased to introduce the first Python library to fully enable GUI testing of Mac applications via the Apple Accessibility API. This library was created out of desperation. Existing tools such as using appscript to send messages to accessibility objects are painful to write and slow to use. ATOMac has direct access to the API. It's fast and easy to use to write tests.

三、使 用

3.1 安装

  1. 由于该库pip包已经很久没更新了,直接pip安装可能会报错,Python2建议使用easy_install安装
  2. 目前atomac 1.1.0不支持Python3,但是@daveenguyen这位大神已经在源码库做了Python3的兼容,所以需要直接从git仓库安装,详细如下:
  1. # Python2
  2. sudo easy_install atomac
  3. # Python3
  4. pip3 install git+https://github.com/pyatom/pyatom/

3.2 常用功能

基础的用法在官网有说明,这里就不再赘述,以下将以地图为例,实现一些常用功能

3.2.1 需要用到

  1. 应用的bundle_id:打开应用内容 -> info.plist
  2. Accessibility Inspector:Xcode -> Open Developer Tools

3.2.1 代码实现

  1. import atomac
  2. from time import sleep
  3. from atomac.AXKeyCodeConstants import *
  4. bundle_id = 'com.apple.Maps'
  5. # bs = atomac.AXClasses.AXKeyCodeConstants.BACKSPACE
  6. # part 1, 启动应用并获取应用信息
  7. atomac.launchAppByBundleId(bundle_id)
  8. sleep(2)
  9. ato = atomac.getAppRefByBundleId(bundle_id)
  10. print(ato)
  11. # part 2, 获取当前应用windows
  12. cur_win = ato.windows()[0]
  13. print(cur_win)
  14. # part 3, 查找元素
  15. # findFirst,返回第一个匹配的元素
  16. # findFirstR,递归查找,返回第一个匹配的元素(当查找的元素Parent非标准窗口时使用)
  17. # 在AXClasses.py文件中可以找到很多已经定义好的方法
  18. # dt = cur_win.radioButtonsR('地图')[0] # 也可以
  19. dt = cur_win.findFirstR(AXRole='AXRadioButton', AXTitle='地图')
  20. gj = cur_win.findFirstR(AXRole='AXRadioButton', AXTitle='公交')
  21. wx = cur_win.findFirstR(AXRole='AXRadioButton', AXTitle='卫星')
  22. # part 4, 元素属性所有
  23. attr = dt.getAttributes()
  24. # 元素某一个属性
  25. dt_title = dt.AXTitle
  26. print(attr, dt_title)
  27. # part 5, 点击/切到公交
  28. # Method 1,唯一定位元素后,使用Press方法
  29. print(gj)
  30. gj.Press()
  31. # Method 2,定位元素坐标并鼠标点击
  32. # 注意AXPositon得到的坐标是元素左上角的坐标,需要根据实际大小得到元素中心点坐标
  33. dt_position = dt.AXPosition
  34. dt_size = dt.AXSize
  35. coord = (dt_position[0] + dt_size[0] / 2, dt_position[1] + dt_size[1])
  36. print(coord)
  37. dt.clickMouseButtonLeft(dt_position)
  38. # part 6, 输入内容(输入键盘字符,US_keyboard)
  39. s1 = cur_win.findFirstR(AXRole='AXTextField', AXRoleDescription='搜索文本栏')
  40. # s1 == s2
  41. # s2 = cur_win.textFieldsR('搜索文本栏')[0]
  42. s1_p = s1.AXPosition
  43. s1_s = s1.AXSize
  44. s1.tripleClickMouse((s1_p[0] + s1_s[0] / 2, s1_p[1] + s1_s[1] / 2))
  45. s1.sendKeys('7983')
  46. # part 7, 输入键盘上的修饰符
  47. sleep(1)
  48. s1.sendKeys([BACKSPACE])
  49. # 回车
  50. s1.sendKeys([RETURN])

3.2.4 元素属性对应说明

  1. ATOMac库使用的元素属性均在其属性名(通过Accessibility Inspector查到)前面加AX,且首字母大写,如下所示
ATOMac Accessibility Inspector
AXSize Size
AXRole Role
AXPosition Position
AXRoleDescription Type
AXValue Value
... ...
  1. 比较特殊的是:AXRoleDescription - Type

参考

https://github.com/pyatom/pyatom

https://zhuanlan.zhihu.com/p/30385931

http://python-atomac.blogspot.com/p/atomac-usage.html

https://blog.csdn.net/sinat_40766770/article/details/91048760

OK!

~

~

~

不积跬步,无以至千里

ATOMac - 基于Python的Mac应用Ui自动化库的更多相关文章

  1. 基于Python实现的死链接自动化检测工具

    基于Python实现的死链接自动化检测工具   by:授客 QQ:1033553122 测试环境: win7 python 3.3.2 chardet 2.3.0 脚本作用: 检测系统中访问异常(请求 ...

  2. airtest自动化中的poco+python连接手机实现ui自动化

    airtest:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html官网地址 AirtestIDE:跨平台的UI自动化测试编 ...

  3. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  4. 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...

  5. 基于python2+selenium3+pytest4的UI自动化框架

    环境:Python2.7.10, selenium3.141.0, pytest4.6.6, pytest-html1.22.0, Windows-7-6.1.7601-SP1 特点:- 二次封装了s ...

  6. Python Selenium 搭建Web UI自动化

    Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python ...

  7. 基于Svelte3.x桌面端UI组件库Svelte UI

    Svelte-UI,一套基于svelte.js开发的桌面pc端ui组件库 最近一直忙于写svelte-ui,一套svelte3开发的桌面端ui组件库.在设计及功能上借鉴了element-ui组件库.所 ...

  8. appium+python 【Mac】UI自动化测试封装框架介绍 <五>---脚本编写(多设备)

    目的: 通过添加设备号,则自动给添加的设备分配端口,启动对应的appium服务.注意:为了方便,将共用一个配置文件. 1.公共的配置文件名称:desired_caps.yaml platformVer ...

  9. [python]pytest实现WEB UI自动化

    前言:其实这篇写的是pytest的测试框架运用,实现自动化和https://www.cnblogs.com/Jack-cx/p/9357658.html 原理一致 1.为啥不用unittest Pyt ...

随机推荐

  1. restful 和RPC 的区别

    https://www.cnblogs.com/Dong-Ge/articles/9577019.html

  2. <NOI2002>银河英雄传说の思路

    emm并没有什么好说的.毕竟我这个蒟蒻都能yy出来 #include<cstring> #include<cstdio> #include<iostream> #i ...

  3. Python程序运行流程与垃圾回收机制

    Python程序运行流程 Python解释器首先将程序将py文件编译成一个字节码对象PyCodeObject(只存在于内存中).(当这个模块的 Python 代码执行完后,就会将编译结果保存到了pyc ...

  4. 大忙人的jdk8,比出生晚了好几个激情的夏天

    写给大忙人的jdk8到手了,第一件事情就蒙蔽了,mac装的jdk7,切换jdk的功能要整出来才行,下好jdk8up101安装,假装几行代码搞定目标在命令行下,可以通过命令'jdk6', 'jdk7', ...

  5. 深入理解Tomcat(12)拾遗

    前言 如何使用? 源码解读 总结 前言 Tomcat为了提高性能,在接受到socket传入的字节之后并不会马上进行编码转换,而是保持byte[]的方式,在用到的时候再进行转换.在tomcat的实现中, ...

  6. java design pattern - adapter pattern

    场景 适配器模式 总结 参考资料 场景 在编程中我们经常会遇到驴头不对马嘴的情况,比如以前是继承A的接口的对象,现在外部调用的时候需要该对象已B接口的形式来调用 ,这个时候我们可以让对象同时集成A和B ...

  7. Linux USB 鼠标驱动程序详解(转)

    Linux USB 鼠标驱动程序详解 USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以 ...

  8. 在使用vue+webpack模版创建的项目中使用font-awesome

    前言:最近使用vue+webpack进行一个小项目的开发,按照官方模版文档完成项目初始化后打算引入ont-awesome字体图标库进行使用,引入过程中遇到一些问题并解决,现记录如下. 一开始进展很顺利 ...

  9. 使用TensorFlow训练自己的语音识别AI

    这次来训练一个基于CNN的语音识别模型.训练完成后,我们将尝试将此模型用于Hotword detection. 人类是怎样听懂一句话的呢?以汉语为例,当听到"wo shi"的录音时 ...

  10. Liferay7 Intellij IDEA 开发环境搭建

    一.安装Liferay插件 安装过程不在赘述,推荐两种安装方式: 通过Intellij插件市场安装 通过下载插件zip包安装 安装完成后,在项目板块中点鼠标右键,会出现Liferay菜单. 二.安装L ...