• 使用AutoIt实现文件上传


           在网页上上传文件的时候,Selenium无法直接操作如Flash、JavaScript 或Ajax 等技术所实现的上传功能,这时候我们需要借用一个叫做AutoIt的软件来帮助我们事先自动化的上传操作。

      官方网站:https://www.autoitscript.com/site/autoit/

      1、AutoIT介绍
          AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作,实现自动化。
     
      2、使用特点
          利用AutoIT编写合适的脚本,然后将脚本编译成可执行文件,在自动化实现时,直接调用此脚本实现文件上传。
          备注:编写脚本和编译,需要借助AutoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用,不再需要安装AutoIT。
     
      3、自动化调用

        AutoIT脚本编译成可执行文件后,放到本地的某一个目录下。自动化实现过程中,需要上传图片时,首先定位到【上传】字样文本,点击此按钮。执行编辑后的可执行文件,实现文件上传。

      为了方便我们的操作和说明,我们首先来自己写一个Html来模拟实际的上传框

    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>文件上传实例</title>
      </head>
      <body>
          <h1>文件上传实例</h1>
            <form method="post" action="/TomcatTest/UploadServlet"enctype="multipart/form-data">选择一个文件: <input type="file" name="uploadFile" /> <br />
              <br /> <input type="submit" value="上传" />
          </form>
      </body>
    </html>

      将代码复制到txt,然后将文件的扩展名改成html再用浏览器打开就可以使用了。

      从官网上面下载AutoItv3并安装,安装好了之后可以在开始菜单看到AutoIt的各种工具。

       

    其中分为几类,
    • AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;
    • Complie Script to .exe,用来将利用AutoIt编写的脚本,编译成可执行文件;
    • Run Script 用来执行AutoIT的脚本信息;
    • SciTE Script Editor用来编写AutoIt脚本。
    • 接下来就是利用以上四种工具,来编写AutoIT脚本,然后编译成可执行文件。

      下面我们就可以来使用AutoIt来操作上传文件了。首先,打开AutoIT Window Info,利用此工具来识别Windows控件信息,如输入框、按钮等。以刚才我们自己写的那个Html为例:

      

      用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。
      从显示的结果得知,此控件的Title=“打开”,Class为Edit,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。
     
      我们这里需要知道有以下信息:
      1.操作页面的title,用于固定操作的页面。
      2.需要填入的信息,在输入框中填入“上传文件的路径及文件名”(windows操作)
      3.点击“打开”按钮,实现文件上传。
     
        根据以上所识别的控件信息,利用编辑器SciTE Script Editor,根据AutoIT的语法编写脚本。
        实现文件上传需要的几个方法:  
      ControlFocus ( "窗口标题", "窗口文本", 控件ID)   
        ---->设置输入焦点到指定窗口的某个控件上(即:控件ID“文件名”输入框的id)
      WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] )  
        ---->暂停脚本的执行直至指定窗口存在(出现)为止
      ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" )   
        ---->修改指定控件的文本(即:控件ID“文件名”输入框的id)
      Sleep ( 延迟 )   
        ---->使脚本暂停指定时间段
      ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] )   
        ---->向指定控件发送鼠标点击命令(即:控件ID“打开”按钮的id)
      其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1(即classnameNN)
     
     上传程序脚本:
    ControlFocus("打开","","Edit1")
    ;识别windows窗口
    WinWait("[CLASS:#32770]","",10)
    ;窗口等待十秒
    ControlSetText("打开", "", "Edit1", "f:abcxyz.txt")
    ;想输入框中输入需要上传的地址
    Sleep(2000)
    ControlClick("打开", "","Button1");
    ;点击[打开】按钮
      AutoIT脚本编写完成后,保存后才可以通过菜单栏“Tools”-->“Go” 运行一下脚本。注意,运行的时候,上传窗口需处于打开状态。
           脚本编辑运行无误后,将其保存。然后打开Complie Script to .exe工具,将保存的脚本编译成exe可执行文件。

       在转换成.exe文件之后,我们即可在java程序中对其进行调用。

    Runtime upload = Runtime.getRuntime();
    try {
      String au3exe = "F:\abc\up1.exe";
        upload.exec(au3exe);
    }catch (IOException e){
        System.out.println("Fail to upload!");
        e.printStackTrace();
    }

      这样,我们就实现了利用AutoIt的自动上传功能。

     
  • 相关阅读:
    STM32使用keil串口输出中文乱码问题
    STM32CUBEMX忘记配置sys中的debug导致程序只能下载一次的问题
    远渡重洋的开源之路我是买家项目
    其实我就是个技术迷自身定位及展望
    五一上海行
    The Secret 秘密 读书笔记
    MySQL数据库设计复习笔记及项目实战
    PHP可调试团队开发环境配置支持企业级开发
    WIN7下QQ概念版使用手记
    Memento
  • 原文地址:https://www.cnblogs.com/generalli2019/p/11451211.html
Copyright © 2020-2023  润新知