首先先介紹工具 AutoIt
AutoIt 要一組安裝三兄弟,才方便使用的。
No | 工具名稱與下載連結 | 敘述 |
1 | AutoIt Recorder-錄製工具 | 安裝起來是版本目前最新版本是 v3.3.14.0 |
2 | SciTE及Exe | 編輯工具,跟執行工具 |
3 | AutoIt Info(下載位置同上) | 取得物件的相關資訊 |
1. 點選後即開始錄製 2. 選擇錄製時是否縮小視窗 3. 錄製文字
4. 錄製滑鼠(這必勾啊!!)
5. 讀取已經 Compile 過的執行檔後,會先執行該 SCRIPT 中的動作,
再進行後續錄製,要錄製大型測試腳本的話是一個頗方便的功能
常用語法:
指令名稱 | 用途說明 |
---|---|
Run |
執行外部程式或檔案。 |
RunWait |
執行外部程式並等待其結束後才繼續執行下一步。 |
Send |
模擬鍵盤輸入。 |
MouseClick |
模擬滑鼠點擊。 |
MouseMove |
移動滑鼠到指定座標。 |
WinWaitActive |
等待指定視窗變成作用中視窗。 |
WinActivate |
將指定視窗設為作用中視窗。 |
WinClose |
關閉指定視窗。 |
WinExists |
判斷指定視窗是否存在。 |
ControlClick |
模擬點擊某個控制元件(如按鈕)。 |
ControlSend |
向某個控制元件送出鍵盤輸入。 |
ControlSetText |
設定控制元件的文字內容(例如輸入框)。 |
MsgBox |
顯示一個訊息視窗(彈出提示框)。 |
Sleep |
暫停指定的時間(毫秒),可用於延遲。 |
If / Else |
條件判斷語句,依據條件執行不同區塊的程式碼(雖然是語法,但很常見)。 |
撰寫注意與開發關卡的處理:
※ 1. 將多支程式都會用到的程式碼,把同一掛目標的處理用指令
Func funcName1() ... EndFunc 歸在一起,
一個 Function 維持 Single Responsibility 的原則處理,
顆粒度自行斟酌。放在另外共用的的檔案,例如 commmonXYZ.au3
主程式使用 #include ".\..\..\common.XYZ.au3" 把切出去的共用程式 納入 進來
If Not WinActive($title,$text) Then WinActivate($title,$text)
WinActivate 可透過錄製取得到 $title , $text
如果有錄製到動態名稱的 text 可以去掉留下 "" 即可,title 能正確對到即可。
※ 3. 輸入從中文模式 切換為 英文模式的處理:
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '00000404' Then
Sleep(2000)
_WinAPI_SetKeyboardLayout($hWnd, "0x0409")
; 呼叫 api 強制設定輸入模式為英文,上面要先 include <WinAPISys.au3>
EndIf
※ 4. 把視窗最大化
WinSetState("[ACTIVE]", "", @SW_MAXIMIZE)
※ 5. 能使用快捷按鍵,盡量使用,會比使用滑鼠來的穩定,當頁面有改版,座標軸會異動,快速按鍵不會更動,
如 Send("{CTRLDOWN}s{CTRLUP}") crtl+s 打開存檔視窗,alt+s 完成存檔
減少存檔按鈕變更位置(這裡指的是 MS Office 的工具頁面)
※ 6. 取得網頁文字存起來
Global $webText="0000"
Send("{CTRLDOWN}c{CTRLUP}")
$webText = ClipGet()
Part3 就先到這裡囉。