转载地址:http://www.cnblogs.com/yangxia-test/p/4637168.html
AutoIT脚本的语法特征
这里主要介绍AutoIT的脚本语法特征,包括变量、关键字、宏、设置选项等,详细的语法细节,可以参考其用户手册,也可以去AutoIT中文论坛( www.autoit.net.cn)交流。
1. 变量
AutoIT的变量命名规则:以$开头的字母、数字、下划线的组合,例如$Name、$Jone_Wang、$Num001,这些命名规则都是合法的。
定义变量可以使用Global、Dim或者Local来定义。如:Dim $Name、Global $Name、Local $Name.它们的区别如下:
Global,申明全局变量
Local,申明局部变量,如函数内部变量
Dim,如果变量名和全局变量同名,则会重用全局变量;否则就只是申明一个局部变量。
2. 常用关键字
Include,包含一个文件到脚本中,用法:#include “[路径\]文件名”;
include-once,指定当前文件只能被包含一次。没有使用这个关键字申明时,一个库文件如果多次被引用,编译器会报错。用法:#include-once;
cs,注释行开始,ce:注释行结束,两者配合使用,即#cs…#ce;
单独注释一行代码,可以使用分号“;”注释。
3. 宏
AutoIT提供了大量的宏,极大地方便了脚本的编写。宏都以@开头,如@OSVersion返回当前操作系统版本;@ProgramFilesDir返回Program Files文件夹路径;@YEAR 返回当前年份(4位数)等。更多的宏,请参看AutoIT帮助。
4. 设置选项
AutoIT可以通过Opt()函数来实现运行时的各种设置,如:
Opt(“MouseCoordMode”,1) 设置鼠标函数使用屏幕绝对坐标值;
Opt(“MouseCoordMode”,0) 设置鼠标函数使用当前激活窗口听相对坐标值;
Opt(“WinTitleMatchMode”,1) 设置窗口函数标题匹配时从头开始匹配标题;
Opt(“WinTitleMatchMode”,2) 设置窗口函数按含明某子串模式来匹配标题。
更多配置选项,请参看Opt()函数的帮助。
5. 内置函数
AutoIT内置了大量常用的函数,主要包括:操作窗口和控件类、控制鼠标键盘类、文件目录管理类、字符串处理类等,基本可以满足绝大多数的需求。同时,官方包中还带了大量第三方的库函数,网络上也有很多人在不断扩充库函数。如果还找不到所需要的特殊功能函数,我们还可以自己编写函数。
6. 如何编写库函数
当我们对一个复杂的应用程序编写脚本的时候,可能有很多功能段是会重复出现的。为了减少编写脚本和维护脚本的工作量及复杂度,我们可以将那些含有相同逻辑的脚本封装成函数,并将这些函数按照功能或类型特点,分类组织在不同的文件中,然后在使用这些函数的脚本里包含这些文件。函数的编写方法:
将功能代码嵌入在Func和EndFunc之间。
定义函数的参数及其返回值。
函数名必须用字母或下划线“_”开头。合法的函数名如MyFunc、Func1、_My_Func1等。
下面是一个示例函数,该函数的功能是返回一个数*2后的值。
1
2
3
4
5
|
;Head.au3
Func MyDouble($value)
$value=$value *
2
Return $value
EndFunc
|
AutoIT安装包中自带了大量非常有用的库函数,它的帮助文档中对每个函数的使用都有非常详细的说明。写脚本时,可以随时通过F1键调出查看。使用这些库函数时,须要在脚本中包含对应的库文件(如#include <Array.au3>).
=============================================================================================================================
下面我们来介绍如何使用AutoIT完成单机程序的自动化测试。使用AutoIT完成桌面应用程序的自动化测试,最重要的是找到识别GUI对象的方法,然后调用AutoIT函数来操纵它或读取它的属性值,并与正确的结果进行比较。AutoIT内置了大量操作Windows标准控件的方法,可以满足一般应用程序的测试需求。我们还可以通过调用动态库或COM扩展的方式来扩展AutoIT的功能。
1. 识别窗口的方法
编写自动化脚本的时候,首先要解决的一个问题就是如何(在众多窗口中)准确识别出目标窗口。一般来说,我们常把窗口的标题(Title)作为它的识别方法。但有时候只给出窗口标题还不够,还要同时给出标题及文件(text)。要获得某个窗口的标题是件很简单的事情(大多数窗口直接就可以看到),可以使用AutoIt提供的窗口信息工具(AutoIt Window Info)抓取。大多数窗口的标题都是显而易见的,例如系统自带的记事本程序(notedad.exe),它的默认标题是“无标题-记事本”,如图所示。窗口标题及其文本是大小写敏感的,包括标点符号在内,我们必须确保它们是完全匹配的。
AutoIt的大部分窗口函数都有窗口标题和文本参数,比如说下面的WinWaitActive函数。这个函数的功能是使脚本暂停执行并一直等到指定窗口出现且激活为止。
1
|
WinWaitActive(“窗口标题
",["
窗口文本"],[超时时间])
|
其中,“窗口标题”是必须指定的参数,而"窗口文本"和"超时时间"都是可选参数。不过,也有些函数的窗口文本参数是必须指定的,如果想省略这个参数,只须指定空字符串("")作为参数即可。在参数窗口文本中指定一个空字符串甚至没有值(NULL),相当于告诉AutoIt任何文本都是有效的。
下面以记事本窗口为例说明上面提到的函数的两种用法:
1
2
3
|
WinWaitActive(“无标题-记事本")
或
WinWaitActive(“无标题-记事本
","
")
|
2. 窗口句柄
AutoIt中的变量可用来存储窗口句柄(Windows Handles)。所谓窗口句柄是指Windows自动分配给每个新创建的窗口的特殊值。窗口句柄可用来代替窗口标题参数。使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,例如,有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题和窗口文本,这时就可以利用窗口句柄的唯一性来准确地识别所指定的窗口。
很多函数如WinGetHandle、WinList和GUICreate都会返回窗口句柄,示例:
1
2
|
$handle=WinGetHandle(“无标题-记事本”)
WinClose($handle)
|
注意:不管当前的WinTitleMatchMode被设置为何种模式,窗口句柄始终可用。
3. 识别控件的方法
AutoIt提供了直接操作控件的功能。窗口上能看到的东西大多数都是以下控件中的一种:按钮、列表框、文本编辑框、静态文本等。例如,系统自带的记事本程序的主窗口也只是一个相对而言比较大的“编辑框(Edit)”控件罢了。正因为AutoIt提供了直接对控件操作的功能,我们再也不须要使用模拟键击等低级的方法来操作窗口了,这使得实现对窗口操作的脚本更加可靠。
AutoIt主要支持标准的Microosft控件。有些应用程序使用了大量的自定义控件,很像是标准的MS控件,但却无法被脚本程序识别,就需要特别的办法来解决。
在使用Control…()函数时,一些控件描述必须提供ControlID。通过这些描述才能正确识别控件。这些描述包括:
- ID,内部控件的ID;
- TEXT,控件文本,如"下一步"按钮;
- CLASS,内部控件的类的名称,如"Edit"或"Button";
- INSTANCE,枚举;
- CLASSNN,类别名,如"Edit1";
以上的属性可以单独使用,也可以组合起来使用。具体使用哪一种属性,主要依据个人喜欢及从AutoIt窗口信息工具所获得的信息类型。一般而言,最好的方法就是使用控件ID,但如果控件ID无法获得或靠控件ID还不足以保证能识别目标控件,那么就须要使用其他的属性,或者属性的组合。
例如,发送文本到记事本的第1个Edit控件:
1
|
ControlSend(“无标题-记事本”,
""
,
"[CLASS:Edit;INSTANCE:1]”,"
这是一些文本")
|
或
1
|
ControlSend(“无标题-记事本
","
","
[CLASSNN:Edit1]”,
"这是一些文本"
)
|
或
1
|
ControlSend(“无标题-记事本
","
","
Edit1”,
"这是一些文本"
)
|
单击“我的窗口”里面的控件,得到控件ID 254,就可以直接使用ID:
1
|
ControlClick(“我的窗口
","
","
[ID:
254
]")
|
或
1
|
ControlClick(“我的窗口
","
",
254
)
|
例如单击第2个包含“完成”文本的按钮,就使用组合方法:
1
|
ControlClick(“我的窗口
","
","
[CLASS:Button;TEXT:”完成
";INSTANCE:2]"
)
|
如果要获得某个控件的句柄可使用ControlGetHandle函数。控件句柄是Windows赋予控件的独一无二的标识符,即每个被创建的控件都具有不同的句柄。示例如下:
1
|
$handle=ControlGetHandle(“Untitled- Notepad”,
""
,
"Edit1"
)
|
4. 操作窗口和控件
确定了窗口和控件的识别方法之后,我们就可以使用AutoIt提供的函数来完成对窗口和控件的操作。常用的函数如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
激活指定的窗口(设置焦点到该窗口,使其成为活动窗口)
WinActive(
"窗口标题"
[,
"窗口文本"
])
关闭指定窗口
WinClose(
"窗口标题"
[,
"窗口文本"
])
移动指定的窗口或调整窗口的大小
WinMove(
"窗口标题"
,
"窗口文本"
],X坐标,Y坐标[,宽度,[,高度[,速度]]])
显示、隐藏、最小化、最大化或还原某个窗口
WinSetState(
"窗口标题"
,
"窗口文本"
,标志)
向指定控件发送鼠标点击命令:
ControlClick(
"窗口标题"
,"窗口文本”,控件ID[,按键[,点击次数[,X坐标[,Y坐标]]]])
向指定控件发送命令:
ControlCommand(
"窗口标题"
,
"窗口文本"
,控件ID,
"命令"
[,
"选项"
])
设置输入焦点到指定窗口的某个控件上:
ControlFocus(
"窗口标题"
,
"窗口文本"
,控件ID)
向指定的控件发送字符串:
ControlSend(
"窗口标题"
,
"窗口文本"
,控件ID,
"字符串"
[,标志])
修改指定控件的文本:
ControlSetText(
"窗口标题"
,
"窗口文本"
,控件ID,
"新文本"
,标志)
向激活窗口发送模拟键击操作:
Send(
"按键"
[,标志])
执行鼠标点击操作:
MouseClick(
"按钮"
[,X坐标,Y坐标[,点击次数[,速度]]] )
执行鼠标拖拽操作:
MouseClickDrag(
"按钮"
,X1坐标,Y1坐标,X2坐标,Y2坐标[,速度])
|
5.验证
在完成测试用例的操作步骤之后,黑盒测试方法主要是通过检查和比较软件的输出结果(包括界面、文件、数据等)来验证测试的结果,判断软件是否存在缺陷。软件界面的检查主要是检查软件窗口和控件的各种状态、标题、文本和图片等信息,并将检查结果写入最终的测试报告中,以供分析。
5.1 验证窗口、控件状态常用的方法
1
2
3
4
5
6
7
8
9
10
|
获取窗口控件的坐标位置和大小等:
WinGetPos(
"窗口标题"
[,
"窗口文本"
]) ;用于窗口
ControlGetPos(
"窗口标题"
,
"窗口文本"
,控件ID) ;用于控件
获取窗口控件的状态(包括是否可见、是否激活、最大化、最小化等):
WinGetSate(
"窗口标题"
[,
"窗口文本"
]) ;用于窗口
ControlCommand(
"窗口标题"
,
"窗口文本"
,控件ID,选项) ;用于控件
检查窗口是否存在
WinExists(
"窗口标题"
[,”窗口文本”])
|
5.2 验证窗口、控件文本常用的方法
1
2
3
4
5
6
7
8
|
获取窗口的完整标题名:
WinGetTitle(
"窗口标题"
[,
"窗口文本"
])
获取窗口中的文本:
WinGetText(
"窗口标题"
[,
"窗口文本"
])
获取控件上的文本:
ControlGetText(
"窗口标题"
,
"窗口文本"
,控件ID)
|
5.3 验证图片或显示效果的常用的方法
AutoIt没有提供图像比较函数,须要自己开发相应的函数。如果不准备开发这方面的功能,就只有将要检查的图像或效果用截屏的方法保存下来,并附在测试报告中,让测试人员事后人工分析。
截取整个屏幕或指定区域:
1
2
3
4
5
|
_ScreenCapture_Capture(
"C:\Image1.jpg"
)
或
_ScreenCapture_Capture(
"C:\Image1.jpg"
,
0
,
0
,
796
,
596
)
或
_ScreenCapture_CaptureWnd(
"C:\Image1.jpg"
,窗口句柄)
|
事例:
1
2
3
4
|
#
include
<ScreenCapture.au3>
;用来保存图像的路径和文件名
$file=
"c:\ScreenCapture"
&@MON & @MDAY & @HOUR & @MIN & @SEC&
" .jpg"
_ScreenCapture_Capture($file);并保存到文件中
|
5.4 验证文件常用的方法
1
2
3
4
5
6
7
8
|
检查文件是否存在:
FileExists(
"路径"
)
获取文件大小:
FileGetSize(
"路径"
)
获取文件基本属性(包括只读,隐藏等):
FileGetAttrib(
"路径"
)
|
5.5 其他验证
1
2
3
4
5
|
返回当前鼠标指针形状的ID:
MouseGetCursor()
获取当前鼠标的坐标位置:
MouseGetPos([dimension])
|
6. 实例
下面这个脚本实例演示了如何打开计算器、找到计算器窗口、操作计算器完成“1+2”的计算和验证,并将检查的结果写入测试报告中。
脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Run(
"calc.exe"
)
WinWaitActive(
"计算器"
)
ControlClick(
"计算器"
,
""
,
"1"
)
ControlClick(
"计算器"
,
""
,
"+"
)
ControlClick(
"计算器"
,
""
,
"2"
)
ControlClick(
"计算器"
,
""
,
"="
)
$Result=ControlGetText(
"计算器"
,
""
,
403
)
if
$Result==
"3. "
Then
FileWriteLine(
"C:\result.txt"
,
"正确:和期望结果3一致"
)
Else
FileWriteLine(
"C:\result.txt"
,
"错误:和期望结果3不一致,实际结果结果为"
&$Result)
EndIf
WinClose(
"计算器"
)
|