1. 程式人生 > >AutoIT實現上傳檔案功能

AutoIT實現上傳檔案功能

當需要上傳檔案,輸入框不是<input>元素,且不能用此方法解決時:

  • 首先找到元素:WebElement  file = driver.findElement(By.name("filename"));
  •   給此元素設定值:file.sendKeys("E:\testfile.jpg");

就需要用到autoIT

一、AutoIT安裝

  • 下載並安裝AutoIT,下載連結:https://www.autoitscript.com/site/autoit/
  • AutoIT安裝成功後,可以在開始選單下看到AutoIT的所有工具,如下圖所示:
  •      其中分為幾類,AutoIT Window Info用來識別Windows控制元件,根據識別的控制元件資訊編寫指令碼;Complie Script to .exe,用來將利用AutoIt編寫的指令碼,編譯成可執行檔案;Run Script 用來執行AutoIT的指令碼資訊;SciTE Script Editor用來編寫AutoIt指令碼。
  • 接下來就是利用以上四種工具,來編寫AutoIT指令碼,然後編譯成可執行檔案

2、利用AutoIT編寫指令碼

(1)  AutoIt Window Info 

       開啟此工具,利用此工具來識別Windows控制元件資訊,如輸入框、按鈕等。

      此工具開啟的介面顯示:

     用滑鼠拖住工具上的Finder Tool的圖示(即圖中藍色圈圈部分)到要識別的控制元件上,控制元件的唯一標識資訊會顯示在工具的左側部分(圖中紅框標出的部分)。

    從顯示的結果得知,此控制元件的Title=“開啟”,Class為Button,Instance=1。我們就是利用控制元件的這些資訊,定位控制元件,編寫指令碼。

(2) SciTE Script Editor

     根據以上所識別的空間資訊,利用此編輯器,利用此軟體根據AutoIT的語法編寫指令碼。

     附實現檔案上傳需要的幾個方法:  

    ControlFocus ( "視窗標題", "視窗文字", 控制元件ID)   設定輸入焦點到指定視窗的某個控制元件上

    WinWait ( "視窗標題" [, "視窗文字" [, 超時時間]] )  暫停指令碼的執行直至指定視窗存在(出現)為止

    ControlSetText ( "視窗標題", "視窗文字", 控制元件ID, "新文字" )   修改指定控制元件的文字

    Sleep ( 延遲 )   使指令碼暫停指定時間段

    ControlClick ( "視窗標題", "視窗文字", 控制元件ID [, 按鈕] [, 點選次數]] )   向指定控制元件傳送滑鼠點選命令

    其中,title即AutoIt Window Info識別出的Title欄位,controlID即AutoIt Window Info識別出的Class和Instance的拼接,如上圖拼接後的結果應為:Button1

    例項:

        

    AutoIT指令碼編寫完成後,可以通過選單欄“Tools”-->“Go” 執行一下指令碼。注意,執行的時候,上傳視窗需處於開啟狀態。

3、AutoIT指令碼編譯成可執行檔案

     指令碼編輯執行無誤後,將其儲存。然後開啟Complie Script to .exe工具,將儲存的指令碼編譯成exe可執行檔案。

     

    點選“Browse”選擇儲存的指令碼檔案,點選“Convert”將其生成exe檔案。

    至此,利用AutoIT實現圖片上傳的流程結束。

4. 然後新增到自動化指令碼中:

driver.findElement(By.id("upfile")).click();

Runtime.getRuntime().exe("d:/upfile.exe");

二、遇到的問題

1. autoIT 按開啟按鈕不靈敏,直接換成輸入enter鍵,程式碼改為如下:

    ControlFocus("檔案上傳","","Edit1");
    WinWait("[CLASS:#32770]","",5);

    ControlSetText("檔案上傳","","Edit1","D:\OA測試總結.docx");

    Sleep(2000);

     Send("{ENTER}")

     Sleep(2000);

2. autoIT實現檔案為變數

    在傳遞命令列引數到AutoIt指令碼中的時候,AutoIt會自動初始化一個特殊的陣列 $CmdLine。
    下面這些可以在AutoIt指令碼中直接使用:
    $CmdLine[0] ;引數的數量
    $CmdLine[1] ;第一個引數 (指令碼名稱後面)
    $CmdLine[2] ;第二個引數

所以,將程式碼改成:

(1) ControlFocus("檔案上傳","","Edit1");
WinWait("[CLASS:#32770]","",5);
ControlSetText("檔案上傳","","Edit1",$CmdLine[0]);
Sleep(2000);
Send("{ENTER}")
Sleep(2000);

(2)自動化程式碼改成:

 Runtime.getRuntime().exe("d:/upfile.exe  file" );