下面我们来介绍如何使用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. ThoughtWorks.QRCode生成二维码

    首先引用需要的dll,此处使用的是ThoughtWorks.QRCode.dll,网上可以找到对应的,此处也有一份,点击下载 http://files.cnblogs.com/files/ives/T ...

  2. 微信公共平台开发1 .net

    如果想通过微信去开发(当然,指的是开发模式下),首先 建议先申请一个服务号,因为服务号的功能与接口也多,有些功能订阅号是实现不了的.另外申请过以后必须得通过微信 认证才能开发,好像是得付300大洋,高 ...

  3. CSS3 实现简单轮播图

    用css3动画实现图片切换效果,原理还是改变left值.只有最简单的自动播放功能,切换后短时间静止,通过最后的位置克隆第一张图片,实现无缝切换. html结构 <div id="con ...

  4. Access sql语句创建表及字段类型

    创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...

  5. Apache服务器的URL重定向

    前端时间要整个Apache重定向功能,在此记录一下. 一.安装Apache Windows版本官方下载安装文件httpd-2.2.21-win32-x86-openssl-0.9.8r,选择安装目录, ...

  6. SharePoint固定的Footer

    原文地址:http://www.eliostruyf.com/sticky-footer-solution-for-sharepoint-2013/ 照搬全文: OFFICE 365 & SH ...

  7. 打造高仿QQ的友盟反馈界面(MVP模式)

    什么是MVP呢,简单来说就是将view层和逻辑完全独立出来,让逻辑和显示完全独立.本例中就是采用了这种模式,让activity作为view层,activity中涉及了适配器,所以这里尝试让适配器作为P ...

  8. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  9. Android-AsyncTask异步任务(获取手机联系人)

    本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有 ...

  10. iOS屏幕适配知识

    一.旋转处理    第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self                            ...