sta*_*ion 23 python windows user-interface ui-automation
我想使用Python在Windows环境中自动执行桌面活动.怎么做?一些例子也会有所帮助.
通过桌面活动,我指的是诸如控制鼠标和键盘,访问活动窗口属性,双击桌面上的图标,最小化和最大化窗口,通过键盘将数据输入到输入弹出窗口等操作.
在Windows中有不同的自动化用户界面方法,可以通过Python访问(使用ctypes或部分Python窗口绑定):
原始窗口API - Get/SetCursorPos用于鼠标,HWND API,如GetFocus和GetForegroundWindow
AutoIt- 一种自动化脚本语言:在Python中调用AutoIt函数
Microsoft Active Accessibility(MSAA)/ WinEvent - 用于通过Win95中的辅助功能API查询UI的API.
UI/Automation(UIA) - MSAAVista中引入的替代品(适用于XP SP3 IIRC).
自动化用户界面来测试它是一项非常重要的任务.有很多陷阱可以绊倒你.
我建议您以自动方式测试自动化框架,以便验证它是否适用于您正在测试的平台(以识别自动化中的API故障与应用程序中的故障).
另一个考虑因素是如何处理本地化.另请注意,Minimize/Maximize/...的名称也是本地化的,并且可以使用与应用程序不同的语言(系统与用户区域设置)!
在伪代码中,MSAA最小化应用程序的程序看起来像:
window = AccessibleObjectFromWindow(FindWindow("My Window"))
titlebar = [x for x in window.AccessibleChildren if x.accRole == TitleBar]
minimize = [x for x in titlebar[0].AccessibleChildren if x.Name == "Minimize"]
if len(minimize) != 0: # may already be minimized
mimimize[0].accDoDefaultAction()
Run Code Online (Sandbox Code Playgroud)
MSAA可访问的项目(object: IAccessible, childId: int)成对存储.这里需要注意使调用正确(例如,get_accChildCount只使用IAccessible,所以当childId不是0时,你必须返回0而不是调用get_accChildCount)!
IAccessible调用可以返回不同的错误代码来指示"this object does not support this property"- 例如DISP_E_MEMBERNOTFOUND或E_NOTIMPL.
注意窗口的状态.如果窗口最大化然后最小化,则还原会将窗口恢复到其最大化状态,因此您需要再次将其恢复以使其恢复到正常/窗口状态.
在MSAA和UIAAPI不支持鼠标右键点击,所以你需要使用一个Win32 API来触发它.
该MSAA模型不支持treeview层次结构信息 - 它将其显示为平面列表.另一方面,UIA只会枚举可见的元素,因此您将无法访问UIA树中折叠的元素.
你可以试试Automa.
它是一个用Python编写的Windows GUI自动化工具,使用起来非常简单.例如,您可以执行以下操作:
# to double click on an icon on the desktop
doubleclick("Recycle Bin")
# to maximize
click("Maximize")
# to input some text and press ENTER
write("Some text", into="Label of the text field")
press(ENTER)
Run Code Online (Sandbox Code Playgroud)
可以在此处找到可用命令的完整列表.
免责声明:我是Automa的开发人员之一.