在做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:附加参数,上面传递的是具体要操作对象

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐