在做UI自动化我们可能会遇到-----上传文件操作
上传文件有两种情况:
- input标签
- 非input标签
1、对于input标签的话我们直接传递一个路径就可以了
2、对于非input标签的话,我们需要借助第三方工具来实现了:
- AutoIt 调用其生成的au3或者是exe文件,太麻烦了,我们不用
- SendKeys 第三方库,但是这个已经10几年没有维护了,不用
- pywin32库 识别对话框句柄,实现上传文件操作、
安装:pip install pypiwin32 或者是 python -m pip install pypiwin32
还需要安装一个工具: WinSpy 工具获取附上:
链接: https://pan.baidu.com/s/14Z5BrMR35pwNkVQBNd0uQA
提取码:lh7r
下载直接解压选择自己电脑版本打开exe文件即可
以上就是工具打开的界面了
使用方法:
主要看的是class和Text属性
这个界面可以看到现在定位的元素的父元素
因为我们使用代码找元素必须得是绝对路径找,所以需要一层一层的往上面找
废话不说了,直接上代码吧
import win32gui import win32con import time # edit - combox - comboBoxEx32 - #32770 # 1找到输入框和打开按钮 元素;2、输入地址,点击打开。 # 前提 :windows上传窗口已经出现。sleep1-2秒等待弹出的出现。 def upload(filePath, browser_type="chrome"): if browser_type == "chrome": title = "打开" else: title = "" # 找元素 # 一级窗口"#32770","打开" dialog = win32gui.FindWindow("#32770", title) ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None) # 二级 comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None) # 三级 # 编辑按钮 edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None) # 四级 # 打开按钮 button = win32gui.FindWindowEx(dialog, 0, 'Button', "打开(&O)") # 二级 # 往编辑当中,输入文件路径。 win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath) # 发送文件路径 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点击打开按钮
传递的参数只需要往这个函数里面传递一个路径即可上传成功
注意:调用此函数之前,一定要先将上传文件的窗口打开,
此函数可以共用,如果浏览器不同,只需要改下title这个参数就可以了