1. 程式人生 > >Selenium如何上傳多張圖片

Selenium如何上傳多張圖片

這個是在本人的自動化測試專案中遇到的問題,本來就是一個簡單的上傳圖片的問題。分為上傳一張圖片和多張圖片,在這個測試專案中多張圖片限制為三張圖片
一張圖片:
這裡寫圖片描述
三張圖片:
這裡寫圖片描述

在此說一下我的心路歷程,一張圖片的上傳用了兩種方法均可以。
一種直接用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。反正遇到問題就是多嘗試咯。