1. 程式人生 > >自動化之UI(autoit)

自動化之UI(autoit)

gre ant for win32 calc 例如 local shell. init

自動化

說到自動化,我真的很不喜歡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)