如此简单的上传文件操作

在做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这个参数就可以了

 

 

 

posted @ 2019-11-29 10:32  大渝  阅读(421)  评论(0编辑  收藏  举报