Selenium如何上傳多張圖片
阿新 • • 發佈:2018-10-31
這個是在本人的自動化測試專案中遇到的問題,本來就是一個簡單的上傳圖片的問題。分為上傳一張圖片和多張圖片,在這個測試專案中多張圖片限制為三張圖片
一張圖片:
三張圖片:
在此說一下我的心路歷程,一張圖片的上傳用了兩種方法均可以。
一種直接用sendkeys方法上傳
driver.findElement(By.className("upload-fileinput")).sendKeys("E:\\123.jpg");
另外一種用AutoIT方法上傳。用AutoIt的原因是selenium無法識別windows的視窗,所以要藉助autoIT工具來實現。
AutoIt指令碼
;ControlFocus("title","text",controlID) Edit1=Edit instance 1
ControlFocus("選擇要載入的檔案", "","Edit1")
; Wait 10 seconds for the Upload window to appear
WinWait("[CLASS:#32770]","",10)
; Set the File name text on the Edit field
ControlSetText("選擇要載入的檔案", "", "Edit1", "F:\\pic\\1.png")
Sleep(2000)
; Click on the Open button
ControlClick("選擇要載入的檔案", "","Button1");
最後一定要用AutoIt編譯成.exe檔案,才可以被呼叫。
這樣上傳一張圖片的問題就被解決了。但是在上傳組圖的時候,上述兩種辦法都沒有辦法完美解決。AutoIt曾經遇到過一次可以成功解決上傳三張圖片的問題,但是多次執行程式碼,效果不佳。所以後來想到藉助另外一種辦法sikulix來解決上傳三張圖片的問題。
1、首先在pom.xml中新增依賴
<dependency>
<groupId>com.sikulix</groupId >
<artifactId>sikulixapi</artifactId>
<version>1.1.0</version>
</dependency>
2、將windows視窗中需要操作控制元件的圖片截圖儲存下來
3、將需要上傳的圖片儲存在某個路徑
4、在測試指令碼中呼叫sikulix
driver.findElement(By.xpath("(//input[@type='file'])[1]")).click();
// 在Windows上操作開啟按鈕
Screen s=new Screen();
// 定義要上傳的圖片存放路徑
String imgPath_p="F:\\pic\\";
// 定義sikulix的圖片存放路徑
String imgPath_s="D:\\sikulix\\";
s.type(imgPath_p+"1.png");
s.click(imgPath_s+"open.png");
Thread.sleep(3*1000);
driver.findElement(By.xpath("(//input[@type='file'])[2]")).click();
s.type(imgPath_p+"2.jpg");
s.click(imgPath_s+"open.png");
Thread.sleep(3*1000);
driver.findElement(By.xpath("(//input[@type='file'])[3]")).click();
s.type(imgPath_p+"3.jpg");
s.click(imgPath_s+"open.png");
Thread.sleep(3*1000);
接下來你會發現,執行指令碼,三張圖片成功上傳
總結一下:上傳圖片的方式有三種:第一種直接用sendkeys方法,一般是針對input按鈕;第二種是藉助於AutoIT工具;第三種就是藉助於sikulix。反正遇到問題就是多嘗試咯。