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

1、AutoIT介绍

AutoIT是一个类似脚本语言的软件,利用此软件我们可以方便的实现模拟键盘、鼠标、窗口等操作,实现自动化。

2、实现原理

利用AutoIT编写合适的脚本,然后将脚本编译成可执行文件,在自动化实现时,直接调用此脚本实现文件上传。

备注:编写脚本和编译,需要借助AutoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用,不再需要安装AutoIT。

3、自动化调用

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

实例:

假如,要上传图片的页面及html显示如下:

利用AutoIT编写的脚本编译后的可执行文件的存放目录:E:\upfile.exe

自动化实现代码:

4、AutoIT安装

  • 下载并安装AutoIT,下载链接:https://www.autoitscript.com/site/autoit/
  • AutoIT安装成功后,可以在开始菜单下看到AutoIT的所有工具,如下图所示:
  •  其中分为几类,AutoIT Window Info用来识别Windows控件,根据识别的控件信息编写脚本;Complie Script to .exe,用来将利用AutoIt编写的脚本,编译成可执行文件;Run Script 用来执行AutoIT的脚本信息;SciTE Script Editor用来编写AutoIt脚本。
  • 接下来就是利用以上四种工具,来编写AutoIT脚本,然后编译成可执行文件

5、利用AutoIT编写脚本

(1)  AutoIt Window Info

打开此工具,利用此工具来识别Windows控件信息,如输入框、按钮等。

此工具打开的界面显示:

用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。

从显示的结果得知,此控件的Title=“打开”,Class为Button,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。

(2) 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

实例:

ControlFocus("打开","","Edit1")
;识别windows窗口
WinWait("[CLASS:#32770]","",10)
;窗口等待十秒
ControlSetText("打开", "", "Edit1", "C:\Users\vivo\Desktop\award_code_template5.xls")
;想输入框中输入需要上传的地址
 Sleep(2000)
ControlClick("打开", "","Button1");
;点击[打开】按钮

AutoIT脚本编写完成后,保存后才可以通过菜单栏“Tools”-->“Go” 运行一下脚本。注意,运行的时候,上传窗口需处于打开状态。

6、AutoIT脚本编译成可执行文件

脚本编辑运行无误后,将其保存。然后打开Complie Script to .exe工具,将保存的脚本编译成exe可执行文件。

点击“Browse”选择保存的脚本文件,点击“Convert”将其生成exe文件。

 driver.findElement(By.name("uploadFile")).click();
        // 点击选择文件按钮
        Thread.sleep(3000);
        // 设置等待3秒
        Runtime exe = Runtime.getRuntime();
        // Java 的Runtime 模块的getruntime.exec()方法可以调用exe 程序并执行。
        try {
            String str = "E://upload.exe";
            exe.exec(str);
            // 运行指定位置的.exe文件
        } catch (IOException e) {
            System.out.println("Error to run the exe");
            e.printStackTrace();
        }

至此,利用AutoIT实现图片上传的流程结束。

时间: 2024-10-14 07:10:28

selenium+java利用AutoIT实现文件上传的相关文章

Java 利用 SWFUpload多文件上传 session 为空失效,不能验证的问题

原文转自:http://www.tqcto.com/article/code/295299.html 我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的.通过使用某些技术手段,比如jquery form.js可以达到异步上传的目的,但最重要的问题在于,它不能够进行多个文件的上传.如果你要上传多个文件,必须一个一个地上传,同时还要在界面上处理当上传完一个文件之后,下一个文件上传框的问题.    现在我们有了一个更多的运行,即使用swfupload进行多文件异步上传.顾名思义

利用Spring处理文件上传

文件上传有很多中方式,之前写过一个利用DiskFileItemFactory实现文件上传的例子,这次项目中使用了新的方式,通过MultipartHttpServletRequest来获取文件流,下面是我的一个DEMO: 输出方式一: <span style="white-space:pre"> </span>//对request进行包装 MultipartHttpServletRequest multipartRequest = (MultipartHttpSe

python+selenium+autoit实现文件上传

问题 在做web端ui层自动化的时候会碰到文件上传的操作,经常有朋友问到,这里总结一下 解决方案 第一种:type=file的上传文件,类似如下的 使用类似这样的代码就可以完成: driver.find_element('name','file').send_keys('./小强测试品牌.png') 第二种:就是第一种除外的,实现起来较为麻烦,这里用到了autoit,大致步骤如下: 1.下载并安装autoit,之后在开始菜单可以看到如下 AutoIt Windows Info 用于识别Windo

java网络编程(7)——利用tcp实现文件上传

其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是同样的道理~,具体看代码实现: 客户端: package com.seven.tcp; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStre

利用XMLHttpRequest实现文件上传

微软最早以ActiveX对象的形式在IE5中引入了XMLHttpRequest对象,经Google发扬光大之后,目前所有的浏览器都已经支持XMLHttpRequest了,目前W3C正在制定XMLHttpRequest Level 2标准草案,相对于原来的XMLHttpRequest,新标准的XMLHttpRequest有了很大的改进,提供了很多新的功能. 本文就新旧XMLHttpRequest对象进行一个简单的比较,并介绍新标准的XMLHttpRequest对象的改进之处. 原来的XMLHttp

简单利用filetype进行文件上传

对于文件上传大家都很熟悉了,毕竟文件上传是获取webshell的一个重要方式之一,理论性的东西参考我的另一篇汇总文章<浅谈文件解析及上传漏洞>,这里主要是实战补充一下理论内容--filetype漏洞! filetype漏洞主要是针对content-type字段,主要有两种利用方式:    1.先上传一个图片,然后将content-type:image/jpeg改为content-type:text/asp,然后对filename进行00截断,将图片内容替换为一句话木马. 2.直接使用burp抓

普通的java Ftp客户端的文件上传

关于ftp上传文件其实并不难,但有时候面对现实的环境还是很蛋疼的,今天我就分享一下,普通的上传文件文件至FTP的方式,它满足大部分FTP,但也有特别的,下篇博客会提及到. 下面我用一个FtpUtil,来实现各种功能: 我们这里的主要功能是: 把本地文件夹下的文件上传到ftp的一个文件夹下 ,如果上传成功,就把上传成功的文件备份到另一个文件夹下,如果备份成功,就可以拿备份成功的文件删除了. 直接上代码了! package cn.tendency.utils; import java.io.File

Java Web开发之文件上传

文件上传有SmartUpload.Apache的Commons fileupload.我们今天介绍Commons fileupload的用法. 1.commons-io.jar 和commons-fileupload-1.3.1.jar 下载地址:http://pan.baidu.com/s/1kVtYMzH 2.web.xml 1 <!-- 上传文件 服务器端 --> 2 <servlet> 3 <servlet-name>UploadServlet</serv

【自动化专题】selenium如何轻松搞定文件上传

使用selenium做自动化时,我们经常会遇到的一个让人头疼的问题就是文件上传. 问题的难点在于selenium无法识别并操作Windows窗口,若我们可以绕过弹出框直接把文件信息上传给选择按钮,难点就解决了. 以下是常见页面形式: 分析HTML,发现无论是普通前台还是Extjs,他们的html有一个共同的特点,具有以下代码: <input ..... type="file" ...../> ok,只要我们使用selenium自带的sendkeys把文件路径(相对绝对无所谓