web ui自动化-- 模拟上传文件操作

背景

webdriver无法对windows的图形界面进行操作,所以借助AutoIt工具实现自动化本地上传文件

方法一,使用Autolt生成exe文件,在Python中调用

AutoIt介绍及安装

AutoIt是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作,它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。

官方下载地址:https://www.autoitscript.com/site/

 

 

分别下载图中标记的 Autolt和Editor

 

 解压后放在同一个文件夹内,并分别安装

Au3Info_x64为元素识别器,可通过拖动Finder Tool来定位元素

 

 根据AutoIt Info所识别的控件信息,打开SciTE Script Editor编辑器(位置:SciTE文件夹中的SciTE.exe)

 

编写脚本

编写脚本输入如下内容,并保存文件为FileUpload.au3:

;识别文件上传弹出窗口
ControlFocus("打开", "","Edit1")

;等待10秒钟,等待上传窗口出现
WinWait("[CLASS:#32770]", "",10)

;设置需要上传的文件路径到文件名输入框中
ControlSetText("打开", "", "Edit1", "C:\Users\User\Desktop\测试图片\3.jpg")

Sleep(2000)

;点击打开按钮
ControlClick("打开", "", "Button1");

脚本写好后,点击Tools->Go,运行脚本

脚本运行正常后,打开AutoIt3\Aut2Exe文件夹中的Aut2exe_x64.exe工具,将脚本转换成可执行文件,如下图。此可执行文件可被python程序调用

 使用Python脚本调用

import os
import time

def file_upload_autolt(filepath):  # 方法1:借助Autolt工具
    '''
    :param filepath: 需要上传文件的路径
    :return: None
    '''
    time.sleep(3)
    os.system(filepath)
    time.sleep(3)

 方法二,使用Python的pywin32库+WinSpy工具,识别对话框句柄

 安装 导入库

# 安装库
pip install pywin32

# 导入库
import win32gui
import win32con

windows安装WinSpy工具

该工具用于定位窗口元素拿到Class值

工具百度网盘提取 https://pan.baidu.com/s/1DRX3m8Xa0iHSzKXH25PMRw 79gt

Python代码

def file_upload_winspy(title,filepath): # 方法2:借助Winspy工具
    '''
    :param title: 打开上传文件的窗口名称,不同浏览器的名称不同
    :param filepath: 需要上传文件的路径
    :return: None
    '''
    time.sleep(3)
    # 一级窗口,即弹出的windows页面
    dialog = win32gui.FindWindow("#32770", title)

    # 打开窗口,地址栏输入框
    ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)

    # 文件名输入框后方的图片格式下拉框
    comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)
    # 文件名输入框的class元素为Edit,无文本内容,所以第四个参数为None
    edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None)
    # 打开按钮的class元素为Button,文本为打开(&O)
    button = win32gui.FindWindowEx(dialog, 0, 'Button', "打开(&O)")

    # 输入文件的绝对路径
    win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)
    # 点击 打开 按钮
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点击打开按钮
    time.sleep(3)

 

 



posted @ 2022-05-07 18:41  溪洋  阅读(508)  评论(0编辑  收藏  举报