Makima - 基于Python实现的跨平台PC端应用自动化测试框架

Python
Mac/Winodows
hank.huang · 2022年10月31日 · 1139 次阅读 · 0 条评论

背景

Makima 是一个基于 Accessibility Api 实现的跨平台 (Mac/Windows)桌面端自动化测试框架,借助开源框架 Ctype(Win)/pyobjc(Mac) 实现了对系统底层 Api 的访问。

安装

pip install makima==0.1.9

元素定位工具

对于 Mac

Accessibility Inspector:Xcode -> 打开 Developer Tools

使用 “Accessibility Inspector” 可以查找到 App 对应的元素属性

对于 Windows

下载 inspect.exe

使用 “inspect.exe” 可以查找到 App 对应的元素属性

使用

启动应用程序并通过窗口名称获取到 UI 对象

对于 Mac: Caculator = initialize_app_ref_for_mac("Caculator")

对于 Windows: Caculator = initialize_app_ref_for_win("Caculator")

App 窗口本身就是一个 UIElementRef 对象,而每个元素也都是一个 UIElementRef 对象。你可以通过 UIElementRef 来调用各种查找或者是点击的方法

鼠标事件:

UIElementRef 对象支持单击、双击、长按

例如: Caculator.find_element_by_wait(acc_name = "Input phone number",0).click() or Caculator.find_element_by_wait(acc_name = "Input phone number",0).doubleClick()

输入事件:

UIElementRef 对象支持输入和清除

(目前输入是将文本写入剪贴板,然后执行 Ctrl C + Ctrl V,清除是 Ctrl + A 全选后,按 Delete... 没办法中文输入太难搞了,为了实现支持中文输入只能先这样搞,有更好的 idea 欢迎提出来)

例如: Caculator.find_element_by_wait(acc_name = "Input phone number",0).input_text("188888")Caculator.find_element_by_wait(acc_name = "Input phone number",0).clear()

查找元素

对于 Mac:

'''
支持的查找方式:
identifier = identifier
help = help
title = title
role_description = role description
role = role name
sub_role = Subrole
value = value

'''

Caculator.find_element_by_wait(self, timeout=5000, use_re=False, **query)

timeout 是一个可选参数,默认值为 5000,即 5 秒

use_re 是一个可选参数,默认值为 False,若传 True 则表示开启正则表达式匹配

e.g Caculator.find_element_by_wait(help=".*Start.*")

query 是一个必备参数,可以同时使用多个 query 来进行查找

e.g Caculator.find_element_by_wait(help="auto", role="AXRadioButton")

对于 Windows:

'''
支持的查找方式:
automation_id=automation id
acc_description = acc description
acc_name=acc name
acc_role_name=role name
acc_value=acc value
class_name=class name
control_type=control type
full_description=full description
'''

Caculator.find_element_by_wait(self, timeout=5000, use_re=False, **query)

timeout 是一个可选参数,默认值为 5000,即 5 秒

use_re 是一个可选参数,默认值为 False,若传 True 则表示开启正则表达式匹配
例如 Caculator.find_element_by_wait(acc_name=".Start.")

query 是一个必备参数,可以同时使用多个 query 来进行查找

例如 Caculator.find_element_by_wait(acc_name="auto", class_name="UIItemsView")

`

通用操作

支持鼠标事件、组合键盘事件:

对于 Windows:

模拟打开 Windows 界面进行搜索并按回车键启动程序
win_keyboard.send(win_keyboard.codes.LEFT_WIN)
win_keyboard.copy_text(app_name)
time.sleep(1)
win_keyboard.send(win_keyboard.codes.CONTROL.modify(win_keyboard.codes.KEY_V), delay=1)
time.sleep(1)
win_keyboard.send(win_keyboard.codes.RETURN)

对于 Mac:

模拟 ctrl c + ctrl v

combination_key_operation(KeyCodes.kVK_ANSI_V, Quartz.kCGEventFlagMaskCommand)

可以传入至多三个按键

评论列表
暂无评论.