selenium+java文件上传
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)
脚本示例如下:
If $CmdLine[0]<2 Then Exit EndIf
handleUpload($CmdLine[1],$CmdLine[2])
Func handleUpload($browser,$uploadfile)
Dim $title
If $browser="ie" Then
$title="选择要加载的文件"
ElseIf $browser="chrome" Then
$title="打开"
ElseIf $browser="firefox" Then
$title="文件上传"
EndIf
If WinWait($title,"",6) Then
WinActivate($title)
;ControlFocus(("title","text",controllD)用于识别windows文件上传窗口
ControlFocus($title,"","")
ControlSetText($title,"","Edit1",$uploadfile)
ControlClick($title,"","Button1")
Else
Return False
EndIf
EndFunc
(5) 之后打开AutoIT3下的Compile Script To .exe,将生成的.au3文件变异为.exe的可执行文件。
(6)lang包下的Runtime类实现cmd命令的效果,来使用我们生成的文件。
//上传附件 -定义上传函数,第一个参数browser是浏览器的名字,第二个参数filePath是文件路径-推荐使用
public static void upload(String browser,String filePath) {
//定义了autoit.ext文件的路径
System.out.println("====" + filePath);
String executeFile=System.getProperty("user.dir")+"\\uploadfile\\autoit.exe";
String cmd = "\""+ executeFile+ "\""+ " "+ "\""+ browser+ "\""+ " "+ "\""+ filePath+ "\"";
System.out.println("cmd="+cmd);
try{
Process process= Runtime.getRuntime().exec(cmd);
process.waitFor();
} catch(Exception e) {
e.printStackTrace();
}
}