下面我们来介绍如何使用AutoIT完成单机程序的自动化测试。使用AutoIT完成桌面应用程序的自动化测试,最重要的是找到识别GUI对象的方法,然后调用AutoIT函数来操纵它或读取它的属性值,并与正确的结果进行比较。AutoIT内置了大量操作Windows标准控件的方法,可以满足一般应用程序的测试需求。我们还可以通过调用动态库或COM扩展的方式来扩展AutoIT的功能。

1. 识别窗口的方法

编写自动化脚本的时候,首先要解决的一个问题就是如何(在众多窗口中)准确识别出目标窗口。一般来说,我们常把窗口的标题(Title)作为它的识别方法。但有时候只给出窗口标题还不够,还要同时给出标题及文件(text)。要获得某个窗口的标题是件很简单的事情(大多数窗口直接就可以看到),可以使用AutoIt提供的窗口信息工具(AutoIt Window Info)抓取。大多数窗口的标题都是显而易见的,例如系统自带的记事本程序(notedad.exe),它的默认标题是“无标题-记事本”,如图所示。窗口标题及其文本是大小写敏感的,包括标点符号在内,我们必须确保它们是完全匹配的。

AutoIt的大部分窗口函数都有窗口标题和文本参数,比如说下面的WinWaitActive函数。这个函数的功能是使脚本暂停执行并一直等到指定窗口出现且激活为止。

WinWaitActive(“窗口标题",["窗口文本"],[超时时间])

其中,“窗口标题”是必须指定的参数,而"窗口文本"和"超时时间"都是可选参数。不过,也有些函数的窗口文本参数是必须指定的,如果想省略这个参数,只须指定空字符串("")作为参数即可。在参数窗口文本中指定一个空字符串甚至没有值(NULL),相当于告诉AutoIt任何文本都是有效的。

下面以记事本窗口为例说明上面提到的函数的两种用法:

WinWaitActive(“无标题-记事本")

WinWaitActive(“无标题-记事本","")

2. 窗口句柄

AutoIt中的变量可用来存储窗口句柄(Windows Handles)。所谓窗口句柄是指Windows自动分配给每个新创建的窗口的特殊值。窗口句柄可用来代替窗口标题参数。使用窗口句柄来代替窗口标题的好处是能够更加精确地识别窗口,例如,有时候我们会同时打开同一应用程序的多个副本,这些窗口具有完全相同的窗口标题和窗口文本,这时就可以利用窗口句柄的唯一性来准确地识别所指定的窗口。

很多函数如WinGetHandle、WinList和GUICreate都会返回窗口句柄,示例:

$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控件:

ControlSend(“无标题-记事本”,"","[CLASS:Edit;INSTANCE:1]”,"这是一些文本")

ControlSend(“无标题-记事本","","[CLASSNN:Edit1]”,"这是一些文本")

ControlSend(“无标题-记事本","","Edit1”,"这是一些文本")

单击“我的窗口”里面的控件,得到控件ID 254,就可以直接使用ID:

ControlClick(“我的窗口","","[ID:254]")

ControlClick(“我的窗口","",254)

例如单击第2个包含“完成”文本的按钮,就使用组合方法:

ControlClick(“我的窗口","","[CLASS:Button;TEXT:”完成";INSTANCE:2]")

如果要获得某个控件的句柄可使用ControlGetHandle函数。控件句柄是Windows赋予控件的独一无二的标识符,即每个被创建的控件都具有不同的句柄。示例如下:

$handle=ControlGetHandle(“Untitled- Notepad”,"","Edit1")

4. 操作窗口和控件

确定了窗口和控件的识别方法之后,我们就可以使用AutoIt提供的函数来完成对窗口和控件的操作。常用的函数如下。

激活指定的窗口(设置焦点到该窗口,使其成为活动窗口)
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   验证窗口、控件状态常用的方法

获取窗口控件的坐标位置和大小等:
WinGetPos("窗口标题"[,"窗口文本"]) ;用于窗口
ControlGetPos("窗口标题","窗口文本",控件ID) ;用于控件 获取窗口控件的状态(包括是否可见、是否激活、最大化、最小化等):
WinGetSate("窗口标题"[,"窗口文本"]) ;用于窗口
ControlCommand("窗口标题","窗口文本",控件ID,选项) ;用于控件 检查窗口是否存在
WinExists("窗口标题"[,”窗口文本”])

5.2 验证窗口、控件文本常用的方法

获取窗口的完整标题名:
WinGetTitle("窗口标题"[,"窗口文本"]) 获取窗口中的文本:
WinGetText("窗口标题"[,"窗口文本"]) 获取控件上的文本:
ControlGetText("窗口标题","窗口文本",控件ID)

5.3 验证图片或显示效果的常用的方法

AutoIt没有提供图像比较函数,须要自己开发相应的函数。如果不准备开发这方面的功能,就只有将要检查的图像或效果用截屏的方法保存下来,并附在测试报告中,让测试人员事后人工分析。

截取整个屏幕或指定区域:

_ScreenCapture_Capture("C:\Image1.jpg")

_ScreenCapture_Capture("C:\Image1.jpg",0,0,796,596)

_ScreenCapture_CaptureWnd("C:\Image1.jpg",窗口句柄)

事例:

#include <ScreenCapture.au3>
;用来保存图像的路径和文件名
$file="c:\ScreenCapture"&@MON & @MDAY & @HOUR & @MIN & @SEC&" .jpg"
_ScreenCapture_Capture($file);并保存到文件中

5.4 验证文件常用的方法

检查文件是否存在:
FileExists("路径") 获取文件大小:
FileGetSize("路径") 获取文件基本属性(包括只读,隐藏等):
FileGetAttrib("路径")

5.5 其他验证

返回当前鼠标指针形状的ID:
MouseGetCursor() 获取当前鼠标的坐标位置:
MouseGetPos([dimension])

6. 实例

下面这个脚本实例演示了如何打开计算器、找到计算器窗口、操作计算器完成“1+2”的计算和验证,并将检查的结果写入测试报告中。

脚本如下:

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("计算器")

如何使用AutoIT完成单机测试的更多相关文章

  1. redis实现主从复制-单机测试

    一.redis实现主从复制-单机测试1.安装redis tar -zxvf redis-2.8.4.tar.gzcd redis-2.8.4make && make install2. ...

  2. LVS单机测试不负载

    LVS单机测试不负载 1.困惑 当我们在个人PC上搭建虚拟机(Vmware)做LVS负载实验的时候,我们不论是在个人浏览器或者其他虚拟机上访问LVS的VIP都会出现上时间刷新都出现同一个页面的情况. ...

  3. kind:Kubernetes in Docker,单机测试 Kubernetes 群集的最佳方案

    请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 作者:gc(at)sysin.org,主页:www.sysin.org 2021.04.28 更新,k ...

  4. 在windows下进行Kafka单机测试

    环境:win10 kafka版本:kafka_2.11-0.10.0.0 zookeeper版本:zookeeper-3.4.11 1. 开启zookeeeper server cmd下 : .\bi ...

  5. hadoop单机

    Hadoop安装教程——单机模式 博客分类: 大数据 Hadoop是MapReduce的开源实现,网上有很多相关的文章,但是很多不全,有的有点乱,本人Ubuntu小白,Hadoop初学者,根据别人的资 ...

  6. Ubuntu 14.04 (32位)上搭建Hadoop 2.5.1单机和伪分布式环境

    引言 一直用的Ubuntu 32位系统(准备下次用Fedora,Ubuntu越来越不适合学习了),今天准备学习一下Hadoop,结果下载Apache官网上发布的最新的封装好的2.5.1版,配置完了根本 ...

  7. centos中-hadoop单机安装及伪分布式运行实例

    创建用户并加入授权 1,创建hadoop用户 sudo useradd -m hadoop -s /bin/bash 2,修改sudo的配置文件,位于/etc/sudoers,需要root权限才可以读 ...

  8. redis安装、测试&集群的搭建&踩过的坑

    1 redis的安装 1.1   安装redis 版本说明 本教程使用redis3.0版本.3.0版本主要增加了redis集群功能. 安装的前提条件: 需要安装gcc:yum install gcc- ...

  9. Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)

    首先要了解一下Hadoop的运行模式: 单机模式(standalone)        单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选 ...

随机推荐

  1. Vue表单

    gitHub地址: https://github.com/lily1010/vue_learn/tree/master/lesson11 一 vue表单 实在是太简单了,直接来个例子 <!DOC ...

  2. CSS 类选择器(四)

    一.类选择器 类选择用使用"."(英文点号)进行标识,后面紧跟类名 如: .red{color:red;} 类样式可以应用于文档中的多个元素,这体现了CSS代码的可重用性,帮助用户 ...

  3. IOS GCD 浅析

     一.简单介绍 1.队列的类型:      1.1主队列:main queue 主线程队列,更新UI的操作.是一个串行的队列,串行队列每次只处理一个任务.      1.2系统创建的并发队列:glob ...

  4. 【原】xcode5&IOS7及以下版本免证书真机调试记录

    搞了有一段IOS开发了,之前一直在企业做,近阶段主要在公司做C++服务端开发,打算在空闲实现搞搞个人开发,为自己赚钱,IDP还没申请下来,所以先用此方法在越狱设备上先做一下app的免证书真机调试,先记 ...

  5. iOS 自定义Actionsheet

    自定义的Actionsheet效果如下 自定义的思路 1.在window上添加两个图层,背景层和功能层,如下图 2.设置背景层的背景色和透明度,并在背景层上添加点击事件 3.将自定义的view添加为功 ...

  6. C语言-03-流程控制

    一.选择结构 1> if语句 使用注意 ① if语句中的条件语句,不要把==和=弄混,可以把常量作为左值, 这样的话,在无用=的情况下,编译时会报错 ② if语句后若要定义新的变量或者有多条语句 ...

  7. Effective Java 12 Consider implementing Comparable

    Sort array with sorted collection construction. public class WordList { public static void main(Stri ...

  8. Effective Java 13 Minimize the accessibility of classes and members

    Information hiding is important for many reasons, most of which stem from the fact that it decouples ...

  9. PS网页设计教程XXIX——如何在PS中设计一个画廊布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  10. Oracle-创建服务器参数文件

    允许使用传统的init.ora或SPFILE作为配置文件.但是建议所有数据库创建和使用一个SPFILE.可以从init.ora创建SPFILE SQL> CREATE spfile FROM p ...