背景
web中有上传下载的操作,都会出现属于windows控件的对话框。web自动化中,下载操作可以通过设置浏览下载模式来避免接触windows控件,但是上传操作需要接触并处理windows控件的对话框的自动化操作。例如下图,邮箱上传附件:
解决方法
本文借助pywinauto框架实现在上传附件过程中windows控件的自动化操作。
主要用到该框架的以下方法:
# 导入pywinauto模块
from pywinauto.application import Application
# 连接到指定应用程序
Application().connect(**kwargs)
# 定位到指定控件
child_window(**kwargs)
#或者
window(**kwargs)
# 输入文本
TypeKeys(text)
# 单击
click()
示例程序
以上图中邮箱上传附件的对话框为例:
from pywinauto.application import Application
class WinAuto:
def __init__(self,class_name,title_re):
# 连接到指定应用程序,此处为连接到指定窗口
self.app = Application().connect(class_name = class_name, title_re = title_re)
# 定位窗口方法
def get_window(self,window_object,class_name = "",title_re = ""):
return window_object.window(class_name = class_name, title_re = title_re)
# 向编辑框输入指定信息
def file_input(self,file_path):
# 定位到标题名为“打开”对话框
window = self.get_window(self.app, "#32770", "打开")
# 定位到编辑框
window = self.get_window(window, class_name ="Edit")
# 向编辑框中输入信息
window.TypeKeys(file_path)
# 点击【打开】按钮
def open_button_click(self):
# 定位到标题名为“打开”对话框
window = self.get_window(self.app, "#32770", "打开")
# 定位到【打开】按钮
button = self.get_window(window, class_name = "Button", title_re = "打开")
# 点击【打开】按钮
button.click()
if __name__ == '__main__':
window = WinAuto("#32770","打开")
window.file_input("ttttt_test")
window.open_button_click()
示例效果
总结
在处理windows控件时,pywinauto框架比较好用。笔者也在使用该框架做C/S客户端应用程序的自动化。