1. 三方工具安装
autoit-v3-setup下载地址
如果打不开可以直接通过云盘下载:百度云盘链接地址 提取码:fdnz
安装过程直接下一步就行(注意下选择32位还是64位)
2. autoit-v3的使用
话不多说先直接上代码:
ControlFocus("打开","","Edit1")
WinWait("[CLASS:#32770]","","10")
ControlSetText("打开","","Edit1",$CmdLineRaw)
Sleep(100)
ControlClick("打开","","Button1")
然后在开始–程序找到 Autolt Window Info 打开,位数自己选择
打开后看到如下界面:
代码解释:
第一行代码:ControlFocus(“打开”,"",“Edit1”)
ControlFocus ( “title”, “窗口文本”, controlID) 设置输入焦点到指定窗口的某个控件上。这里的“窗口文本”可以不写
第二行代码:WinWait("[CLASS:#32770]","",“10”)
WinWait ( “title题” , “窗口文本” , 超时时间 ) 暂停脚本的执行直至指定窗口存在(出现)为止;这里的“窗口文本”可以不写
第三行代码:ControlSetText(“打开”,"",“Edit1”,$ CmdLineRaw)
ControlSetText ( “title”, “窗口文本”, controlID, “新文本” ) 修改指定控件的文本;这里的“窗口文本”可以不写。$CmdLineRaw是什么意思后面讲
第五行代码:ControlClick(“打开”,"",“Button1”)
ControlClick ( “title”, “窗口文本”, 控件ID , 按钮 , 点击次数 ) 向指定控件发送鼠标点击命令;这里有些参数可以不用写
然进行保存,保存后会生成au3后缀的文件。然后通过Compile Script to .exe
将脚本转化成exe文件。
在工作使用中文件上传的弹窗基本一样,大多数情况只需要下title就可以了,甚至有些时候根本不用修改。
3.python代码调用exe实现文件上传
import os
#path1是exe的路劲。例如:F:\workspace\private_clouds\librarys\filename.exe
#path2是需要上传文件的路径。例如:F:\1.txt
os.system(‘{0} {1}’.format(path1,path2))#注意中间有空格
3.2Java代码调用exe实现文件上传
AutoIt3的脚本如下:
ControlFocus("打开","","Edit1")
WinWait("[CLASS:#32770]","",100) ;等待0.1秒
ControlSetText("打开", "", "Edit1", $CmdLineRaw) ;打开文件目录
WinWait("[CLASS:#32770]","",2000) ;等待0.1秒
;Send("{ENTER}") ;敲回
WinWait("[CLASS:#32770]","",5000) ;等待0.1秒
ControlClick("打开", "","Button1");
JAVA调用方法如下: 引入的名称要加入引号,选中图片后,默认会加入" "
String picName = "d:\\"+"\"图片3.png\" \"图片2.png\"";
Runtime.getRuntime().exec("businessGroup/community-autotest-ui/src/main/resources/uploadCmd.exe " +picName);
4.命令行参数
$CmdLine[0] 获取的是命令行参数的总数,在上例中 $CmdLine[0]=3
$CmdLine[1]~ $CmdLine[63] 获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数,不过正常情况下是足够用的
$CmdLineRaw 获取的是未拆分的所有参数,是一个长字符串,这种情况下不局限与63个参数。
备注:这段资料在网上找的, $CmdLineRaw 参数超过69个好像就不能上传了(个人遇到的仅供参考)
5.上传文件/文件夹
上传单文件:
只需要把第三行代码稍微改一下就行了例如:
ControlSetText(“打开”,"",“Edit1”,“D:\upload_file.txt”)
多文件同时上传(不限个数)
第三行代码:ControlSetText(“打开”,"",“Edit1”,$CmdLineRaw)保持不变。我这里专门写了一个方法,无论你是传入的列表、json还是单个文件,统一将参数格式化为下图的格式。
这里单独说一下参数是json格式时的情况,我这里是在excel写成类似字典的格式
,python读取后是str类型,所有我通过json.loads将其转化为字典类型的。类似下图,注意这里要是英文双引号
格式化代码:
def path_format(self, path):
'''
将多个文件所在位置(路径)进行格式化,转化为指定的格式
:param path: 需要上传文件的路径
:return: 将格式化的文件格式返回 "F:\1.txt" "F:\2.txt" "F:\3.txt"
'''
file_names = ''
if type(path) is list:
for i in path:
file_names = file_names + '"' + i + '"' + ' '
return file_names
else:
try:
data = json.loads(path)
for i in data.values():
file_names = file_names + '"' + i + '"' + ' '
return file_names
except:
return path
def fileUpload(self, path1, path2):
'''
文件上传
:param path1: 文件路径(.au3转换的.exe)
:param path2: 需要上传文件格式,从path_format方法获取
:return:
'''
sleep(2)
path3 = self.path_format(path2)
os.system(path1 + ' ' + path3)
上传文件夹
与上传文件一样,将文件路径换成文件夹路径就可以了
ControlFocus("选择要上传的文件夹","","Edit1")
WinWait("[CLASS:#32770]","","10")
ControlSetText("选择要上传的文件夹","","Edit1",$CmdLineRaw)
Sleep(100)
ControlClick("选择要上传的文件夹","","Button1")