自动化之UI(autoit)

Posted vvsky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化之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)的主要内容,如果未能解决你的问题,请参考以下文章

UI自动化测试AutoIT工具使用和robot对象模拟键盘按键操作

利用向日葵, Webdriver, Autoit 实现远程办公自动化之 向网页中多个位置上传不同图片

python+selenium+autoit实现文件上传

python+selenium+autoit实现文件上传

用AutoIt自动安装和卸载程序

AutoIt 最佳实践/编码风格