1.Input元素
直接使用sendKeys()方法
driver.findElement(By.id("attachment")).sendKeys("D:\\test.txt");
2. 非input元素处理方法,借助AutoIT3工具
下载工具并安装,下载地址:https://www.autoitscript.com/
安装步骤省略。
步骤如下:
(1)首先打开被测系统要上传文件的页面。
(2)之后打开安装的AutoIT3文件夹下的AutoIT3_x64.exe。
(3)鼠标选中AutoIt Window Info窗口内的Finder Tool,长按到靶子浮现之后拖动到本地文档窗口“文件名”输入框内,获取文本框的信息。之后重复此动作,获取上传按钮的信息。
(4)获取文本框和上传按钮的元素信息后,打开SciTE Script Editor,将以下代码复制粘贴到文本区域。这段代码的用意是首先判断所传参数是否大于1个,之后调用handleUpload函数,函数是先判断进行文件上传的是什么浏览器,之后,根据上一步所采集到的文本框及上传按钮元素属性,实现文件路径的打开“上传”按钮的点击,也就是上传功能的实现。保存生成后缀为.au3的文件。
(5)
;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
脚本示例如下:
;ControlFocus(("title","text",controllD)用于识别windows文件上传窗口
ControlFocus("打开","","")
;向文件名输入框输入本地要上传文件的路径
ControlSetText("打开","","Edit1","D:\workspace\VCPlatform\uploadfile\城市夜景.mp4")
Sleep(3000)
;点击上传窗口中的“打开“按钮
ControlClick("打开","","Button1")
(5) 之后打开AutoIT3下的Compile Script To .exe,将生成的.au3文件变异为.exe的可执行文件。
(6)lang包下的Runtime类实现cmd命令的效果,来使用我们生成的文件。
//上传附件
public static void uploadFile(String filePath) {
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec(filePath);
Thread.sleep(5000);
} catch (Exception e) {
System.out.println("Fail to upload");
e.printStackTrace();
}
}