selenium2用AutoIt上傳文件


1.標簽是input,如下圖所示:

WebElement e1= driver.findElement(By.id("load"));
//輸入要上傳文件的地址
e1.sendKeys("D:\\Work\\eclipse_workspace\\seleniumdemo\\res\\被上傳的文件.txt");

 

2.使用autoit腳本上傳方式

有的上傳控件不是input元素,這個時候利用sendkeys方法是行不通的。此時可以通過autoit來幫助我們實現上傳功能,先了解下什么是autoit。它是一個使用類似BASIC腳本語言的免費軟件,它設計用於Windows GUI(圖形用戶界面)中進行自動化操作。它利用模擬鍵盤按鍵,鼠標移動和窗口/控件的組合來實現自動化任務。而這是其它語言不可能做到或無可靠方法實現的

我們主要利用autoit來實現對上傳文件彈窗的定位,然后對彈窗中地址框賦值(文件路徑),然后點擊確定按鈕進行上傳文件,如下圖:

具體思路知道該怎么做了,下面通過autoit腳本來實現。
首先你需要安裝autoit(官網:https://www.autoitscript.com/site/),直接默認安裝即可。
接下來需要通過AutoIt Window Info (x86)或者AutoIt Window Info (x64)(這個是你剛才安裝的autoit自帶的應用程序,你可以在開始菜單中找到,如果開始菜單中沒有請到安裝目錄下查找),先打開AutoIt Window Info ,如圖:

打開其中對應你windows的程序,界面如下:

這個工具是定位windows gui(windows界面)元素用的。接下來會對上傳彈出框進行定位。

那百度的個人頭像上傳功能,點擊選擇圖片:

之后,會彈出:

然后找切換到剛才打開的AutoIt Window Info 工具,找到Finder Tool:然后用鼠標拖動此圖標到文件上傳彈窗的 文件名輸入框:

記錄下文件名輸入框的classname值。然后用上面的方法在獲取下“打開”按鈕的calssname,如圖:

記錄好“打開”按鈕的calssname。接下來根據定位值來編寫autoit腳本。

打開安裝目錄下的:SciTE Script Editor應用程序:

輸入下面的代碼:

;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

需要強調的是,autoit是根據彈窗的名字來給文件名輸入框賦值和點擊按鈕等操作的,由於不同的瀏覽器彈窗的名字可能不一樣,這里要謹慎選擇。

autoit的腳本到此寫完了,但是由於我們是在cmd中調用,需要將其轉換成exe可執行文件。

打開autoit安裝目錄下的應用程序:Compile Script to .exe (x86)或者Compile Script to .exe (x64),

然后按照圖中操作:

點擊Conver按鈕,則成功講upload.au3腳本轉換為運行文件upload.exe,如下圖:

 

接下來測試下效果,打開cmd,輸入:"C:\Users\Jing\Documents\upload.exe" "firefox" "C:\Users\Public\Pictures\pic.jpg"  雙引號不要省略,如圖:

之后回到網頁,查看剛才的頭像已被上傳:

這里需要強調下腳本在cmd的試用,第一個參數的是autoit exe腳本文件,第二是 autoit腳本函數需要的參數,回頭看看腳本,一個參數是瀏覽器名字:chrome或者ie或者firefox,第二個參數是要上傳文件的路徑,並且都要用英文環境下的雙引號括起來,就形成了下面的代碼:
"C:\Users\Jing\Documents\upload.exe" "firefox" "C:\Users\Public\Pictures\pic.jpg"

如何在Selenium中調用此腳本呢?你可以封裝成一個執行這個exe文件的方法:

/**
* 上傳文件,需要點擊彈出上傳照片的窗口才行
*
* @parambrower
*            使用的瀏覽器名稱
* @paramfile
*            需要上傳的文件及文件名
*/
publicvoidhandleUpload(String browser, File file) {
    String filePath= file.getAbsolutePath();
    String executeFile= "res/script/autoit/Upload.exe"; //定義了upload.exe文件的路徑
    String cmd= "\""+ executeFile+ "\""+ " "+ "\""+ browser+ "\""+ " "+ "\""+ filePath+ "\"";
    try{
        Process p= Runtime.getRuntime().exec(cmd);
        p.waitFor();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

然后在需要有上傳文件的用例中調用,具體步驟是:

先去用selenium點擊上傳文件按鈕,之后會彈出上傳文件輸入框,最后執行上面那個public void handleUpload(String browser, File file)方法即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM