使用苹果的可访问性api在mac上自动测试用cocoa编写的gui应用程序
atomac的Python项目详细描述
简介
我们很高兴介绍第一个python库,通过apple accessibility api对mac应用程序进行gui测试。这个图书馆是出于绝望而建立的。现有的工具,例如使用AppScript将消息发送到Access对象是痛苦的,写起来慢用。atomac可以直接访问api。编写测试既快捷又容易。
开始
Atomac需要安装运行OSX和Xcode的系统。它已经在10.6、10.7和10.8上进行了广泛的测试。10.5可以工作。如果您在特定版本的os x上遇到atomac问题,请在问题跟踪程序中打开问题单。
必须启用系统范围的可访问性。选中复选框:系统首选项>;通用访问>;启用辅助设备访问。在某些模块使用期间,如果不启用此选项,将导致errorapidisabled异常。
安装应该像运行以下命令行一样简单,该命令行将下载、构建和安装atomac:
$ sudo easy_install atomac
用法
一旦安装了Atomac模块,您就可以使用它启动应用程序:
>>> import atomac >>> atomac.launchAppByBundleId('com.apple.Automator')
这将启动自动机。接下来,获取应用程序本身的ui元素的引用:
>>> automator = atomac.getAppRefByBundleId('com.apple.Automator') >>> automator <pyatom.AXClasses.NativeUIElement AXApplication u'Automator'>
现在,我们可以在辅助功能层次结构中找到对象:
>>> window = automator.windows()[0] >>> window.AXTitle u'Untitled' >>> sheet = window.sheets()[0]
注意,我们从窗口对象axtitle中检索了一个可访问性属性。atomac支持大多数属性的读写。使用xcode附带的辅助功能检查器可以提供一种快速查找这些属性的方法。
有一个获取工作表对象的快捷方式,它绕过了通过窗口对象访问它-Atomac可以搜索层次结构中的所有对象:
>>> sheet = automator.sheetsR()[0]
大多数类型的可访问性对象都有搜索方法。每个搜索方法,比如windows,都有相应的递归搜索函数,比如windowsR。递归搜索查找的项不只是直接子项,而是子项的子项。这些搜索方法可以被赋予识别特定元素的术语。注意到了吗?可在所有Atomac搜索方法中用作通配符匹配字符:
>>> close = sheet.buttons('Close')[0]
atomac有一个方法来搜索符合任意数量条件的ui元素。条件是辅助功能属性:
>>> close = sheet.findFirst(AXRole='AXButton', AXTitle='Close')
FindFirst和FindFirstR返回找到的与条件匹配的第一个项或无。FindAll和FindAllR返回所有符合条件的项的列表或空列表。
对象相当多用。您可以获取对象上支持的属性和操作的列表:
>>> close.getAttributes() [u'AXRole', u'AXRoleDescription', u'AXHelp', u'AXEnabled', u'AXFocused', u'AXParent', u'AXWindow', u'AXTopLevelUIElement', u'AXPosition', u'AXSize', u'AXTitle'] >>> close.AXTitle u'Close' >>> close.getActions() [u'Press']
执行一个动作是很自然的:
>>> close.Press()
任何动作都可以这样触发。
ldtp
从1.0.0版开始,atomac现在包括了与ldtp的兼容性,ldtp是一个跨平台的自动化库。这允许测试人员编写一个脚本,在linux、windows和现在的mac os x上自动化测试用例。有关ldtp的信息和文档可以在LDTP home page上找到。
ldtp操作实际上与linux上的操作相同。导入机制略有不同,因为它与atomac一起提供。在被测系统上执行的跨平台脚本应导入ldtp客户端,如下所示:
try: import ldtp except ImportError: import atomac.ldtp as ldtp
在未来,ldtp客户端可能会被分解成一个独立于平台的模块来解决这个问题。
与linux平台一样,ldtp守护进程可以在sut上运行,通过在shell提示符下执行ldtp来启用客户机/服务器测试。有关客户机/服务器操作的详细信息,请参阅ldtp文档。
待办事项和贡献
尽管atomac功能齐全,在vmware上驱动了数百个自动化测试用例,但我们有一个任务清单,可以使项目变得更好。
- 格式化-此代码当前不符合PEP-8。
- 更好的鼠标操作-例如,一种从一个ui元素平滑地拖动到另一个ui元素的方法。
- 清理搜索方法-我们可以使用curring以更干净的方式定义axclasses中的所有搜索方法。
请随意提交针对github上项目的pull请求。如果您对开发atomac本身感兴趣,请注册pyatom dev邮件列表。
另请参见
许可证
atomac是在gnu通用公共许可下发布的。有关详细信息,请参见copying.txt。