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 对应的元素属性
对于 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)
可以传入至多三个按键
@aa17620915891 @pennycxl 不好意思啊,最近比较忙,问题已修复。这个 issue 主要是缘于某次更新的时候 不小心加了一个 kmeans_run() 的调用,在 kmeans_run 这个 py 文件内。目前已移除
E TypeError: kmeans_run() missing 1 required positional argument: 'path'
你这个问题解决了嘛
kmeans_run()
E TypeError: kmeans_run() missing 1 required positional argument: 'path'
这里路径怎么不存在的?
https://github.com/letmeNo1/Makima
git 地址给一下老哥