赞
踩
在 PyWinAuto 自动化(一)中,提高了如何操作应用程序,先获取应用程序对象、然后获取窗口对象、再获取元素对象,最后就可以操作元素(控件)。这里先补充一下控件的相关内容,通过定位拿到控件之后,可以获取相关控件属性,常用方法如下:
这些相关属性,可以通过第三方工具直接看到的,这里要介绍一个 dir()方法,传入一个参数:控件/其他方法,就能够查看该控件支持哪些方法,这个很有用,在编写代码的过程中也会经常用到。你拿到一个控件的时候,如果不知道它支持哪些方法,或者你使用的方法报错,可以先看看这个控件是否支持这个方法。
# 应用对象 app = Application(backend="uia").connect(title_re='.*DingTalk.*') # 查看对象 dlg = app.window(title="DingTalk") print(dlg.wrapper_object()) ====>> uiawrapper.UIAWrapper - 'DingTalk', Dialog #控件 ele = dlg.child_window(best_match="Edit2") ele.click_input() print(ele.wrapper_object()) ====>> uia_controls.EditWrapper - '', Edit print(dir(dlg.wrapper_object())) print(dir(ele.wrapper_object())) print(dlg.children()) print(dlg.class_name()) print(ele.get_properties())
app = Application("uia").connect(title="钉钉")
dlg = app.window(title="钉钉")
search = dlg.child_window(title="搜索", control_type="Edit")
print(search.window_text()) #搜索
print(search.element_info.name) #搜索
print(search.element_info.class_name)
print(search.element_info.control_type) #Edit
print(dir(search.wrapper_object()))
控件常用操作
窗口及控件截图
# 截图-窗口
app = Application(backend="uia").connect(title_re='.*DingTalk.*')
dlg = app.window(title="DingTalk")
pic = dlg.capture_as_image()
pic.save("login.png")
# 截图-控件
ele = dlg.child_window(best_match="Edit2")
pic2 = ele.capture_as_image()
pic2.save("pwd.png")
菜单及子菜单项操作
思路就是:先获取到这个菜单项,返回一个对象,然后获取所有的子菜单项,选择一个子菜单。items() 方法可以获取子菜单项,选择子菜单有2种方式:1.通过下标选择;2.通过路径选择。最后通过 click_input() 或 select() 打开子菜单。
下标选择子菜单:.item_by_index(index)
路径选择子菜单:.item_by_path(“父菜单->子菜单”)
menus = dlg.child_window(best_match="Menu")
print(menus.items())
print(menus.item_by_index(0))
print(menus.item_by_path("编辑(E)->撤销"))
menus.item_by_path("文件(F)->打印(P)...").click_input() #点击子菜单;
m = dlg.child_window(best_match = "Menu")
f = m.item_by_path("文件->打开").select()
级联菜单选择
可以直接通过 menu_select(”一级菜单 -> 二级菜单“),但是,控件本身必须是 Menu;
dlg.menu_select("File -> Export Sessions")
Combox 选项选择
对于这类下拉选择框,有2种方式选择值:标准操作、点击选择。
# 标准操作,获取到下拉选择框,直接通过 select 选择一个值
dlg.child_window(best_match="ComboBox").select("xxx")
# 点击选择,分步操作,先点击下拉框,再选列表值
dlg.child_window(best_match="ComboBox").click_input()
dlg.child_window(best_match="cURL Script").click_inpit()
文件对话框
可以直接定位文件,输入文件名,保存;
dlg.child_window(title="文件名",control_type="Edit").set_text("xxx")
dlg.child_window(title="保存(S)").click_input()
TabControl 选项卡
选项卡通常是一组,所以先定位选项卡组,在选择某个Tab;
dlg.child_window(best_match="TabControl").select("xxx")
上传文件窗口
上传文件就是打开一个窗口,然后去指定的目录路径下选择指定的文件,然后确定,所以,没有特殊操作。但是,要注意,Application 对象只能控制一个进程实例,当你打开一个上传文件窗口时,相当于又开了一个进程,所以,要使用 Desktop() 获取应用程序对象。
app2 = pywinauto.Desktop()
dlg2 = app2.window(title="打开")
dlg2.child_window(title_re=".*地址:.*").click_input() 点击地址栏
SendKeys("{BACKSPACE}") 删除;
鼠标操作
窗口等待
这个就是等窗口出现再操作窗口里面的控件,有时脚本执行的快,窗口还没出现,所以会报错,这就要提 wait()、wait_not()。
wait(wait_for, timeout=None, retry_interval=None),等待窗口处于某个状态;
wait_for | 等待的状态;exists:表示该窗口是有效的句柄;visible:表示该窗口未隐藏;enabled:表示未禁用窗口;ready:表示该窗口可见并启用;active:表示该该窗口处于活动状态; |
---|---|
timeout | 超时时间; |
retry_interval | 重试时间间隔; |
wait_not(wait_for, timeout=None, retry_interval=None),等待窗口处于某个状态;
new_dlg = dlg.child_window(best_match="新建标签")
new_dlg.wait(wait_for="ready",timeout=5,retry_interval=1) # 等待窗口出现
new_dlg.click_input() #重新获取焦点
SendKeys("nihoa")
chat = dlg.child_window(control_type = "Document",class_name="Chrome_RenderWidgetHostHWND") #获取聊天窗口;
chat.wait("ready",10,1) #等待聊天窗口
chat.print_control_identifiers() #聊天窗口加载完成后打印结构
到这里,控件的属性、操作,以及不同场景的操作都介绍完了,当然,这不是全部,好多功能不能一一讲解,大家有其他疑问,尤其是键盘操作那块,可以参考 pywinauto 中文文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。