在网页上上传文件的时候,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:\abc\xyz.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的自动上传功能。

 

使用AutoIt实现文件上传的更多相关文章

  1. python+selenium+autoit实现文件上传

    问题 在做web端ui层自动化的时候会碰到文件上传的操作,经常有朋友问到,这里总结一下 解决方案 第一种:type=file的上传文件,类似如下的 使用类似这样的代码就可以完成: driver.fin ...

  2. selenium+java利用AutoIT实现文件上传

    转自https://www.cnblogs.com/yunman/p/7112882.html?utm_source=itdadao&utm_medium=referral 1.AutoIT介 ...

  3. python selenium +autoit实现文件上传 --实践

    upload.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...

  4. AutoIt实现文件上传

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

  5. 采用AutoIt实现文件上传

    在非常规的上传界面中,AutoIt可以操作Windows资源管理器实现上传路径的输入. AutoIt中编辑以下脚本,需通过“AutoIt Windows Info”定位资源管理器路径输入位置信息及打开 ...

  6. autoit 处理文件上传弹出框,并在JAVA中调用

    Java  代码 //定义exe 文件存放的绝对路径 File file2 = new File("."); String command = file2.getCanonical ...

  7. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  8. Selenium3自动化测试【29】文件上传

    日常在访问页面时,文件上传与下载操作也常常用到,因此在Web自动化测试中也会遇到文件上传的情况.针对上传功能,WebDriver并没有提供对应的方法.针对上传文件的场景主要有两种解决思路: 同步视频知 ...

  9. AutoIt实现Webdriver自动化测试文件上传

    在运用WebDriver进行自动化测试时,由于WebDriver自身的限制,对于上传文件时Windows弹出的文件选择窗口无法控制,通过在网上查找资料锁定使用AutoIt来控制文件上传窗口. Auto ...

随机推荐

  1. [LeetCode] 165. Compare Version Numbers 比较版本数

    Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...

  2. Ubuntu16.04 安装搜狗Linux中文输入法

    参考链接: https://blog.csdn.net/leijieZhang/article/details/53707181 补充:安装完搜狗拼音输入法后候选栏是乱码的情况,解决方法如下: 输入如 ...

  3. python:单元测试框架pytest的一个简单例子

    之前一般做自动化测试用的是unitest框架,发现pytest同样不错,写一个例子感受一下 test_sample.py import cx_Oracle import config from sen ...

  4. 【C/C++开发】C++编译指令#pragma pack的配对使用

    C++编译指令#pragma pack的配对使用 #pragma pack可以用来指定C++数据结构的成员变量的内存对齐数值(可选值为1,2,4,8,16). 本文主要是强调在你的头文件中使用pack ...

  5. 湖南省第6届程序大赛 Repairing a Road

    Problem G Repairing a Road You live in a small town with R bidirectional roads connecting C crossing ...

  6. VS+OpenGl 显示三维STL模型 代码

    今天调出了用VS环境结合OpenGL glut工具包进行显示STL模型的模块,进行了渲染.效果: 如下,后期会进行进一步优化,先贴上: #ifndef DATA_H #define DATA_H st ...

  7. [转帖]Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞

    Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞 https://news.cnblogs.com/n/647075/ 强烈建议:Chrome 用户请尽快升级浏览器!在谷歌今天发布的紧急补丁程序 ...

  8. 【RocketMQ源码学习】- 4. Client 事务消息源码解析

    介绍 > 基于4.5.2版本的源码 1. RocketMQ是从4.3.0版本开始支持事务消息的. 2. RocketMQ的消息队列能够保证生产端,执行数据和发送MQ消息事务一致性,而消费端的事务 ...

  9. Delphi 将视频 Base64 字符串转换为视频二进制文件

    var Bytes: TBytes; Stream: TBytesStream; begin with System.NetEncoding.TBase64Encoding.Create do try ...

  10. pymysql 模块简单使用

    目录 pymysql 模块简单使用 安装 pymysql 模块 使用 pymysql 连接数据库 并插入数据 使用pymysql 插入数据 修改查询显示结果 pymysql 模块简单使用 安装 pym ...