python工具类--上传文件
在做UI自动化时,经常会遇到的一个问题就是上传文件问题,前端通过调用Windows的文件选择器上传文件到云服务。通常我们用的selenium 就无法识别到Windows的弹窗。之前在解决这类问题时,一般需要借助第三方工具,比如AutoIT(一款C端的工具),通过在AutoIT中编写脚本,然后将脚本编译成exe,最后在我们的自动化脚本中执行exe的方式进行处理。...
在做UI自动化时,经常会遇到的一个问题就是上传文件问题,前端通过调用Windows的文件选择器上传文件到云服务。通常我们用的selenium 就无法识别到Windows的弹窗。之前在解决这类问题时,一般需要借助第三方工具,比如AutoIT(一款C端的工具),通过在AutoIT中编写脚本,然后将脚本编译成exe,最后在我们的自动化脚本中执行exe的方式进行处理。
最近在python中发现一个新的第三方类库可以帮助解决这类问题,甚至可以用来做C端的UI自动化,这个库就是pyQT5。
pyQT5本身一个用来编写客户端程序的。QT的底层其实就是windows的API文档调用。pyQT5只是在QT上封装了一层实现。
可以通过pyQT5进行Windows窗体的识别、内容的获取、按钮的点击、输入等一切动作,结合一些测试框架,可以轻松实现客户端的自动化工作。
以解决上传文件为例,代码如下:
安装:
pip install pyqt5
pip install pywin32
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022-04-07 8:53
# @Author : herry
# @File : UploadFile_Win32.py
# @software: PyCharm
# @describe: UploadFile_Win32
import time
import win32con
import win32gui
def uploadFile_win32(filepath):
"""
本地文件上传组件,可以自动识别Windows的文件选择器进行输入,并确认
:param filepath: 需要上传的文件路径
:return:
"""
dialog = win32gui.FindWindow(None,u'打开') # 利用win32gui,找到对话框
if dialog==0:
print("未找到文件选择器")
return -1
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None) # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄
button = win32gui.FindWindowEx(dialog, 0, 'Button', None) # button按钮,这里会查找到两个,一个打开、一个取消
time.sleep(0.5)
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, filepath) # 往输入框输入绝对地址
time.sleep(0.5)
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 点 打开 按钮
if __name__ == "__main__":
# win32api.MessageBox(None,"Hello,pywin32!","pywin32",win32con.MB_YESNO)
filepath = "F:\\测试图片\\12517718757_182273196.400x400.jpg"
uploadFile_win32(filepath)
FindWindowEx(Parent, ChildAfter , ClassName , WindowName ):
#获取操作的句柄。
parent: 父窗体
ChildAfer:通过父窗体查找下的子窗体,默认0查找所有
className:类名
WindowsName:窗体的title ,可以为空
SendMessage(hwnd, message , wparam , lparam )
#给指定句柄发送消息
hwnd:需要操作的句柄
message:发送消息的类型
wparam:附加参数,上面的例子中用来传递ID值,即查找到的元素中的第几个。
lparam:附加参数,上面传递的是具体要操作对象
更多推荐



所有评论(0)