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();
}
}