自动化调用:
- AutoIT脚本编译成可执行文件后,放在本地的某一个目录下
- 上传文件时,首先定位到【上传】字样文本,点击该按钮
- 执行编辑后的可执行文件,实现文件上传
一、安装AutoIT3,主要用到的工具
AutoIt Windows Info 用于帮助我们识Windows控件信息。
Compile Script to.exe 用于将AutoIt生成 exe 执行文件。
Run Script 用于执行AutoIt脚本。
SciTE Script Editor 用于编写AutoIt脚本。
1)、用AutoIt Windows Info 识别Windows控件信息,如按钮
2、用SciTE Script Editor编写脚本,脚本内容如下:
;first make sure the number of arguments passed into the scripts is more than 1
If $CmdLine[0]<2 Then Exit EndIf ;if parmas num <2 ,then break
;$CmdLine[0] ;参数的数量
;$CmdLine[1] ;第一个参数 (脚本名称后面)
;$CmdLine[2] ;第二个参数
;都是从cmd传入参数
handleUpload($CmdLine[1],$CmdLine[2])
;定义上传函数,有两个参数,第一个是浏览器名字,第二参数是文件路径
Func handleUpload($browser, $uploadfile)
Dim $title ;定义一个title变量
;根据弹窗的title来判断是什么浏览器
If $browser="ie" Then ; 代表IE浏览器
$title="选择要加载的文件"
;ElseIf $browser="chrome" Then ; 代表谷歌浏览器
; $title="打开"
ElseIf $browser="firefox" Then ; 代表火狐浏览器
$title="文件上传"
EndIf
if WinWait($title,"",4) Then ;等待弹出出现,最大等待时间是4秒
WinActivate($title) ;找到弹出窗口之后,激活当前窗口
ControlSetText($title,"","Edit1",$uploadfile) ;把文件路径放入输入框,此Edit1是用FinderTool获取到的
ControlClick($title,"","Button1") ;点击保存或者打开或者上传按钮,此Button1使用FinderTool获取到的
Else
Return False
EndIf
EndFunc
说明:title是AutoIt Window Info识别出的Title字段,controlID是AutoIt Window Info识别出的Class和Instance的拼接
运行脚本,Toos-->Go,运行时,上传窗口处于打开状态。
3)、用Complie Script to .exe工具,将脚本编译成可执行文件,即编译成.exe格式
二、执行AutoIT编写的.exe文件
/*
* 上传文件
* 普通上传:普通的附件上传是将本地文件的路径作为i一个值放在input标签中,通过form表单将这个值提交给服务器
*/
//定义上传函数,第一个参数browser是浏览器的名字,第二个参数filePath是文件路径
public void handleUpload(String browser,String filePath) {
//定义了autoit.ext文件的路径
String executeFile=System.getProperty("user.dir")+"\\test_exe\\autoit.exe";
String cmd = "\""+ executeFile+ "\""+ " "+ "\""+ browser+ "\""+ " "+ "\""+ filePath+ "\"";
System.out.println(cmd);
try{
Process process= Runtime.getRuntime().exec(cmd);
process.waitFor();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 导入文件
* */
public void ExcelImport(String filePath){
browse_m.click(); //@FindBy(name="get_file") public WebElement browse_m;//点击浏览按钮
handleUpload(DriverManager.browserType,filePath);
}
使用的时候直接调用就可以