Application(backend='uia').start(cmd_line=r"xxx.exe", work_dir=r"xxxApplication") # backend优先使用'uia';拿不到元素,在考虑换'win32' app = Application(backend='uia').connect(path="xxx.exe") # 连接exe进程名称 win = app.window(title_re="CLIP.*") win.print_control_identifiers()
====》 判断程序的backend
法1:使用工具spy++
如果是GUI的程序,用spy++这个微软的小工具来看,从类名前缀能看出是什么编写的程序。
a、afx__开头的:mfc写的;
b、t_开头的:一般是delphi,少部分是c++builder;比如主窗体一般是tMainForm;
c、thunder_开头的:一般是VB6写的;
d、windows__开发头的,一般都是.net写的;
e、awt__或者swing__开头的,一般都是java写的;
f、其他的直接以win32api gui控件开头的,一般都是c++或者VC++写的。
法2:使用工具inspect
点击inspect左上角的下拉列表,切换到“UI Automation”,然后鼠标点一下你需要测试的程序窗体,inspect就会显示相关信息。
inspect中显示了程序的有关信息,说明backend为uia,inspect中显示拒绝访问,说明程序的backend应该是win32
=================================
1、有名称,可以直接用 win[name]的方式获取,即 win.print_control_identifiers() 可以打印出来名称的。
2、大多数元素用click_input()即可,不行,尝试用click();【部分元素虽然是表面是wrapper,但实际是btn和checkbox,可以用click()]
3、无名称的元素,可以用父元素的descendents()获取,如dlag_win.descendants(),得到一个list,用index取元素,进行点击
4、元素查看用 inspect.exe; 下载安装windows sdk里面自带:https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/#sysreq
5、窗口选择
1)、根据窗口标题/类名选择: app["QQ"]
2)根据窗口类名选择 :window = app.TXGuiFoundation
3)获取坐标 : print(app["QQ"].rectangle())
6 窗口控件基本属性获取方法
1)获取控件类型:wrapper_object()
2)获取控件支持的方法:print(dir(a.wrapper_object()))
3) 获取控件的子元素:children()
4)获取控件类名:class_name()
5)以字典的形式返回控件的属性:get_properties()
【以上全部可以用inspect直接查看获取】
7。文本 ele.texts()
8 控件/窗口截图:
ele.capture_as_image()`
9 菜单操作:
# 通过下标选择菜单项
menu = window['menu'] print(menu.items())#获取菜单的子菜单项 m = menu.item_by_index(1) print(m)
# 通过路径选择菜单项
menu = window['menu']
print(menu.items())#获取菜单的子菜单项
m = menu.item_by_path("文件->新建连接...")
print(m)
10 等待:window.wait(wait_for='ready',timeout=10,retry_inteval=1)
wait_until(10.5, .5, self.item_count, 10)#等待item_count函数的结果为5的时候开始停止等待。。。若超过10s,则超时报错
官网: https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html?highlight=wait#pywinauto.application.WindowSpecification.wait
参考:https://www.pythonf.cn/read/127079#timings_161
参考:https://www.cnblogs.com/wuxunyan/p/9366178.html