• 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)


  • 相关阅读:
    2017.11.20 定时器与数码管
    2017.11.19 C语言基础及流水灯实现
    libcmtd.lib(exe_wwinmain.obj) : error LNK2001: 无法解析的外部符号 _wWinMain@16
    VCatlmfcincludeafx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    VS2015解决 error C4996: 'strdup': The POSIX name for this item is deprecated.
    vs2015单元测试
    pkg-config的一些用法
    CMake快速入门
    CMake入门教程
    Ubuntu16.04下安装NVIDIA显卡驱动
  • 原文地址:https://www.cnblogs.com/wxinyu/p/16243760.html
Copyright © 2020-2023  润新知