自動化之UI(autoit)
自動化
說到自動化,我真的很不喜歡UI這層去做實踐。前置條件要求比較嚴謹,如果不滿足特定的前置條件,那麽成本實在太大了。
投入與產出差過大,效果打折扣。從互聯網來說,UI自動化是入門門檻很低的一種實踐,但是互聯網能滿足這種前置條件的產品感覺並不多。
其一:它需要產品是維穩的,即變動不是非常的大。
其二:對於元素會有一定的要求,比如web,那麽對html的頁面元素就會希望開發能規範ID或者class等;對於PC應用,也則需要有可識別的ID,包括移動APP也是。
常見使用的工具一般集合在:selenium/uiautomation/appium/monkey等,早之前還有QTP。
我最早練手是使用的QTP,後面陸陸續續也用過一些其他的,比如web自動化還做了瀏覽器js插件去適配測試。
後面,有接收到任務要求做PC應用程序的自動化,當時認為QTP太大了,而且需要破解等比較麻煩,就改用了AutoIT工具去實現。
AutoIT這款工具,大部分是被用來做遊戲外掛的,所以想做外掛的人不要局限於按鍵精靈。
AutoIT範例
首先介紹下AutoIt常用的兩個菜單項,如下圖:
1.幫助文檔
2.autoit window info分為32位系統識別和64位系統識別,識別程序應用的元素。類似於selenium抓取的html元素,又類似於uiautomationview這個。
識別元素界面打開如下:請記住紅色圈圈內圖標。抓取元素就是靠點擊該按鈕不放手拖動到你需要的產品上去識別。粉紅部分就是抓取到的信息
案例腳本如下:
1 #cs 2 對計算器進行自動化測試 3 自動計算4+5=9 4 結束後關閉計算器窗口 5 #ce 6 7 Calc() 8 9 Func Calc() 10 Local $time=2000; 11 ;運行計算器 12 Run("calc.exe"); 13 ; 等待1s,計算器窗口出現 14 Local $hWnd = WinWait("[CLASS:CalcFrame]", "", 1) 15 ;激活該窗口,即將光標定位道該窗口 16 WinActivate("[CLASS:CalcFrame]");17 ;點擊4 18 ControlClick($hWnd, "", "Button4"); 19 ; 等待2s觀察效果. 20 Sleep($time); 21 ;點擊+ 22 ControlClick($hWnd, "", "Button23"); 23 Sleep($time); 24 ;點擊5 25 ControlClick($hWnd, "", "Button10"); 26 Sleep($time); 27 ;點擊= 28 ControlClick($hWnd, "", "Button28"); 29 Sleep($time); 30 WinClose("[CLASS:CalcFrame]"); 31 32 EndFunc ;==>Calc
AutoIt支持其他語言
AutoIt支持VBScript腳本,範例如下:
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘ ‘ Example WSH Script (VBScript) ‘ ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘ Require Variants to be declared before used Option Explicit ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘ Declare Variables & Objects ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ Dim oShell Dim oAutoIt ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘ Initialise Variables & Objects ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ Set oShell = WScript.CreateObject("WScript.Shell") Set oAutoIt = WScript.CreateObject("AutoItX3.Control") ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ ‘ Start of Script ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘ WScript.Echo "This script will run some test calculations" oShell.Run "calc.exe", 1, FALSE ‘ Wait for the calc window to become active oAutoIt.WinWaitActive "Calculator", "" ‘ Send some keystokes to calc oAutoIt.Send "2*2=" oAutoIt.Sleep 500 oAutoIt.Send "4*4=" oAutoIt.Sleep 500 oAutoIt.Send "8*8=" oAutoIt.Sleep 500 oAutoIt.WinClose "Calc", "" oAutoIt.WinWaitClose "Calc", "" WScript.Quit
AutoIt支持C++,同時也支持java,VB, Delphi, C等 。
均可以在以上語言開發的同時嵌入Autoit。
備註
以上腳本適用於win32標準控件框架,當你的框架並非win32標準時,可以使用autoit走相對坐標去實現或者使用sikuli去實現,總之,自動化是應產品而選擇方案的。
詳細腳本就不解釋了,可以參考手冊,手冊內有非常多的案例。
做自動化或者說測試,個人感覺需要培養一種思路,而不是說會去用種工具就可以了。
同時,希望有誌於往測試發展的人,還是希望至少能熟悉一種語言,這真的是優勢,熟悉語言也可以為工作提供不少的幫助。
文章寫的這些僅僅只是入門的一種,其實需要培養的思路是有助於去做一些框架的架設等事情,其實可以去熟悉下微軟的SDTE。
自動化之UI(autoit)