1 识别窗口的方法
编写自动化脚本的时候,首先要解决的一个问题就是如何(在众多窗口中)准确识别出目标窗口。一般来说,我们常把窗口的标题(Title)作为它的识别方法。但有时候只给出窗口标题还不够,还要同时给出标题及文件(text)。要获得某个窗口的标题是件很简单的事情(大多数窗口直接就可以看到),可以使用AutoIt提供的窗口信息工具(AutoIt Window Info)抓取。大多数窗口的标题都是显而易见的,例如系统自带的记事本程序(notedadexe),它的默认标题是“无标题-记事本”,如图所示。窗口标题及其文本是大小写敏感的,包括标点符号在内,我们必须确保它们是完全匹配的。
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验证
在完成测试用例的 *** 作步骤之后,黑盒测试方法主要是通过检查和比较软件的输出结果(包括界面、文件、数据等)来验证测试的结果,判断软件是否存在缺陷。软件界面的检查主要是检查软件窗口和控件的各种状态、标题、文本和等信息,并将检查结果写入最终的测试报告中,以供分析。
51 验证窗口、控件状态常用的方法
1
2
3
4
5
6
7
8
9
10
获取窗口控件的坐标位置和大小等:
WinGetPos("窗口标题"[,"窗口文本"]) ;用于窗口
ControlGetPos("窗口标题","窗口文本",控件ID) ;用于控件
获取窗口控件的状态(包括是否可见、是否激活、最大化、最小化等):
WinGetSate("窗口标题"[,"窗口文本"]) ;用于窗口
ControlCommand("窗口标题","窗口文本",控件ID,选项) ;用于控件
检查窗口是否存在
WinExists("窗口标题"[,”窗口文本”])
52 验证窗口、控件文本常用的方法
1
2
3
4
5
6
7
8
获取窗口的完整标题名:
WinGetTitle("窗口标题"[,"窗口文本"])
获取窗口中的文本:
WinGetText("窗口标题"[,"窗口文本"])
获取控件上的文本:
ControlGetText("窗口标题","窗口文本",控件ID)
53 验证或显示效果的常用的方法
AutoIt没有提供图像比较函数,须要自己开发相应的函数。如果不准备开发这方面的功能,就只有将要检查的图像或效果用截屏的方法保存下来,并附在测试报告中,让测试人员事后人工分析。
截取整个屏幕或指定区域:
1
2
3
4
5
_ScreenCapture_Capture("C:\Image1jpg")
或
_ScreenCapture_Capture("C:\Image1jpg",0,0,796,596)
或
_ScreenCapture_CaptureWnd("C:\Image1jpg",窗口句柄)
事例:
1
2
3
4
#include <ScreenCaptureau3>
;用来保存图像的路径和文件名
$file="c:\ScreenCapture"&@MON & @MDAY & @HOUR & @MIN & @SEC&" jpg"
_ScreenCapture_Capture($file);并保存到文件中
54 验证文件常用的方法
1
2
3
4
5
6
7
8
检查文件是否存在:
FileExists("路径")
获取文件大小:
FileGetSize("路径")
获取文件基本属性(包括只读,隐藏等):
FileGetAttrib("路径")
55 其他验证
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("calcexe")
WinWaitActive("计算器")
ControlClick("计算器","","1")
ControlClick("计算器","","+")
ControlClick("计算器","","2")
ControlClick("计算器","","=")
$Result=ControlGetText("计算器","",403)
if $Result=="3 " Then
FileWriteLine("C:\resulttxt","正确:和期望结果3一致")
Else
FileWriteLine("C:\resulttxt","错误:和期望结果3不一致,实际结果结果为"&$Result)
EndIf
WinClose("计算器")
((CComboBox)GetDlgItem(i))->GetLBText(((CComboBox)GetDlgItem(i))->GetCurSel(), str);
你应该将这个列表框关联一个CListCtrl类型的变量;如CListCtrl m_ctlList;然后在对话框的OnInitDialog()函数中,增加三个标题头,通过调用CListCtrl的
int InsertColumn(int nCol,
LPCTSTR lpszColumnHeading,
int nFormat = LVCFMT_LEFT,
int nWidth = -1,
int nSubItem = -1
)方法;
参数: nCol 新建列的索引值。
pColumn 包含新建列属性的LVCOLUMN结构的地址。
lpszcolumnHeading 包含列标题的字符串的地址。
nFormat 指定列对齐方式的整数。它为下列值之一:LVCFMT_LEFT,LVCFMT_RIGHT或LVCFMT_CENTER。
nWidth 以像素为单位的列宽。如果该参数为-1,那么没有设置列宽。
nSubItem 与列相关联的子项的索引。如果该参数为-1,那么没有子项与列相关。
如:
m_ctlListInsertColumn(0,"食品"LVCFMT_LEFT,95);//插入表头标题
m_ctlListInsertColumn(1,"价格"LVCFMT_LEFT,95);//插入表头标题
m_ctlListInsertColumn(2,"金额"LVCFMT_LEFT,95);//插入表头标题
然后,你在为“确定”按钮添加事件处理函数;在响应函数中:
1首先调用UpdateData(TRUE);更新控件上的值
2获取各个控件上的值,(用GetDlgItemText()函数)
3然后插入到列表框当中,调用CListCtrl的int InsertItem(int nItem,LPCTSTR lpszItem)函数
如: m_ctlListInsertItem(0,“面包”);
m_ctlListInsertItem(1,“20元”);
大题思路就是这样的;
附录:
CListCtrl::InsertItem
int InsertItem(const LVITEM pItem)
int InsertItem(int nItem,LPCTSTR lpszItem)
int InsertItem(int nItem, LPCTSTR lpszItem,int nImage)
int InsertItem(UINT nMask,
int nItem,
LPCTSTR lpszItem,
UINT nState,
UINT nStateMask,
int nImage,
LPARAM lParam
)
返回值:
如果成功,则返回新建列的索引值,否则为-1。
参数: pItem 指向指定项属性LVITEM结构的指针,如联机文档“平台SDK”中所述。
nItem 被插入项的索引值。
lpszItem 包含项标签的字符串的地址,或当项为回调项时,该变量为LPSTR_TEXT CALLBACK。要了解更多有关回调项的信息,请参阅CListCtrl::GetCall backMask
nImage 项图象的索引值,或当项为回调项时,该变量为I_IMAGECALLBACK。要了解更多有关回调项的信息,请参阅CListCtrl::GetCallbackMask
nMask 参数nMask指定了哪个项属性作为参数传递是有效的。它可以是联机文档“平台SDK” 中LVITEM结构所描述的一个或多个掩码值。有效的数据能够通过位与运算来组合。
nState 指示项的状态、状态图象及轮廓图象。请参阅联机文档“平台SDK”中的LVITEM来获取更多信息,并参阅有效标志列表中的列表视图项状态。
nStateMask 指示状态成员中的哪一位将被获取或修改。请参阅联机文档“平台SDK”中的LVITEM来获取更多信息。
nImage 图象列表之内项的图象的索引。
lParam 与项相关联的应用指定的32位值。如果该参数被指定,那么必须设置nMask的属性为LVIF_PARAM。
说明:向列表视图控件中新插入一项。
附录2:
CListCtrl
CObject
└CCmdTarget
└CWnd
└CListCtrl
CListCtrl类封装“列表视图控件”功能,显示每个包含图标(列表视图中)和标签的收集。除图标和标签外,每一项还能有显示在图标和标签的右边的列中的信息。此控件(以及CListCtrl类)只适用于运行于Windows 95和Windows NT 351及更高版本的程序。
下面是CListCtrl类的主要概况。对于详细的、概念性的讨论,请参阅联机文档“Visual C++程序员指南”中的“使用ClistCtrl”和“控件主题”。
视图
列表视图控件可用四种不同方式显示其内容,称为“视图”。 · 图标视图
每一项以全尺寸图标(32×32像素)出现,下面有一个标签。用户可在列表视图窗口拖动项到任意位置。
· 小图标
视图每一项以小图标(16×16像素)出现,右边有一个标签。用户可在列表视图窗口拖动项到任意位置。
· 列表视图
每一项以小图标出现,下面有一个标签。项按列排列,不能拖动到列表视图窗口的任何位置。
· 报表视图
每一项在本行上出现,右边有排列成列的附加信息。最左边的列包含小图标和标签,下一列包含应用指定的子项。嵌入标题控件实现这些列。要了解报表视图标题控件和列的更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:给控件添加列(报表视图)”。
控件的当前列表视图风格指定当前视图。要了解这些风格及其用法的更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:改变列表控件风格”。
扩展风格
除了标准列表风格,类CListCtrl支持一系列提供丰富功能的扩展风格。此功能的一些示例包括: · 逗留选择
有效时,若光标保持在某项上一段时间,则允许自动选择该项。
· 虚列表视图
如果有效,允许控件支持DWORD项。通过把管理应用项数据放在最顶上而成为可能。除了项选择和焦点信息,所有项信息必须由应用管理。要了解更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:虚列表控件”。
· 单击或双击激活
如果有效,允许热跟踪(项文本自动高亮显示)和高亮显示项的单击和双击激活。
· 拖放列表命令
如果有效,允许拖放列表视图控件中列的记录。只对报表视图有效。
要了解使用新扩展风格的更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:改变列表控件风格”。
项和子项
列表视图控件中的每一项含有一个图标、一个标签、一个当前状态和应用定义值(称为“项数据”)。一个或更多子项还可与每一项联系。一个“子项”是一个字符串,在报表视图中可显示在项图标和标签右边的列里。列表视图控件中的每一项都必须与子项数目相同。
类CListCtrl提供一些函数来插入、删除、查找和更改这些项。要了解更多信息,请参阅“Visual C++程序员指南”中的“使用CListCtrl:列表控件中的滚动、排列、排序和查找”。同时请参阅CListCtrl::GetItem,CListCtrl::InsertItem和CListCtrl::FindItem。
缺省时,列表视图控件负责存储一个项的图标和文本属性。然而,除了这些项类型外,类CListCtrl支持“回调项”。一个“回调项”是一个列表视图项,每个应用枣而不是控件枣存储文本,图标或两者。回调掩码用于指定哪个项的属性(文本和/或图标)由应用提供。如果应用使用回调项,它必须可以提供按需要提供文本和/或图标属性。回调项在你的应用已有部分这种信息时很有帮助。要了解更多信息,请参阅CListCtrl::GetCallBackMask和“使用CListCtrl:回调项和回调掩码”。
图象列表
图标、标题项图象和应用定义的列表视图项状态包含在一些图象列表中(由类CImageList实现),可创建和指派到列表视图控件中。每个列表视图控件可有四个以上的图象列表类型: · 大图标
在图标视图中使用,得到全尺寸图标。
· 小图标
用于小图标、列表和报表视图中,得到图标视图中使用的小版本的图标。
· 应用定义的状态
包含状态图象,在项图标旁显示以指示一个应用定义状态。
· 标题项
用于在报表视图中,得到出现在每个标题控件项中的小图象。
缺省时,列表视图控件删除指派给它的图象列表(当它删除时);然而,开发者可通过删除由应用定义的不再使用的图象列表。要了解更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:列表项和图象列表”。
#include <afxcmnh>
请参阅:CImageList
CListCtrl类的成员
构造函数 ClistCtrl 构造一个CListCtrl对象
Create 创建列表控件并将其附加给CListCtrl对象
属性 GetBkColor 获取列表视图控件的背景色
SetBkColor 设置列表视图控件的背景色
GetImageList 获取用于绘制列表视图项的图象列表的句柄
SetImageList 指定一个图象列表到列表视图控件
GetItemCount 获取列表视图控件中的项的数量
GetItem 获取列表视图项的属性
GetCallbackMask 获取列表视图控件的回调掩码
SetCallbackMask 设置列表视图控件的回调掩码
GetNextItem 查找指定特性和指定指定项关系的列表视图项
GetFirstSeletedItemPosition 在列表视图控件中获取第一个选择的列表视图项的位置
GetNextSeletedItem 为重复而获取下一个选择的列表视图
GetItemRect 获取项的有界矩形
SetItemPosition 在列表视图控件中移动一项到指定位置
GetItemPosition 获取列表视图项的位置
GetStringWidth 指定需要显示所有指定字符串的最小列宽
GetEditControl 获取用于编辑一个项文本的编辑控件的句柄
GetColumn 获取控件的列的属性
SetColumn 设置列表视图列的属性
GetColumnWidth 获取报表视图或列表视图中的列的宽度
SetColumnWidth 改变报表视图或列表视图中的列的宽度
GetCheck 获取与某项相关的状态图象的当前显示状态
SetCheck 设置与某项相关的状态图象的当前显示状态
GetViewRect 获取列表视图控件中所有项的有界矩形
GetTextColor 获取列表视图控件的文本颜色
SetTextColor 设置列表视图控件的文本颜色
GetTextBkColor 获取列表视图控件的文本背景色
SetTextBkColor 设置列表视图控件的文本背景色
GetTopIndex 获取最高级项的索引
GetCountPerPage 计算可正好垂直放入列表视图控件中的项的数目
GetOrigin 获取列表视图控件的最初的当前视图
SetItemState 改变列表视图控件的项的状态
GetItemState 获取列表视图控件的项的状态
GetItemText 获取列表视图项或子项的文本
SetItemText 设置列表视图项或子项的文本
SetItemCount 准备一个列表视图控件以添加大量的项
GetItemData 获取与某项相关的应用所指定的值
SetItemData 设置项的应用指定的值
GetSelectedCount 获取列表视图控件中选择项的数量
SetColumnOrderArray 设置列表视图控件的列序(左或右)
GetColumnOrderArray 获取列表视图控件的列序(左或右)
SetIconSpacing 设置列表视图控件中的图标的距离
GetHeaderCtrl 获取列表视图控件的标题控件
GetHotCursor 获取在热调试对列表视图控件有效时使用的游标
SetHotCursor 设置在热调试对列表视图控件有效时使用的游标
GetSubItemRect 获取列表视图控件中某项的有界矩形
GetHotItem 获取当前在游标下的列表视图项
SetHotItem 设置列表视图控件的当前热项
GetSelectionMark 获取列表视图控件的选择屏蔽
SetSelectionMark 设置列表视图控件的选择屏蔽
GetExtendedStyle 获取列表视图控件的当前扩展风格
SetExtendedStyle 设置列表视图控件的当前扩展风格
SubItemHitTest 指定哪个列表视图项在指定位置,若存在
GetWorkAreas 获取列表视图控件的当前工作区
GetNumberOfWorkAreas 获取列表视图控件的当前工作区数量
SetItemCountEx 设置虚列表视图控件的项的数量
SetWorkAreas 设置列表视图控件中图标可以显示的区域
ApproximateViewRect 指定显示列表视图控件项所需的宽度和高度
GetBkImage 获取列表视图控件的当前背景图象
SetBkImage 设置列表视图控件的当前背景图象
GetHoverTime 获取列表视图控件的当前逗留时间
SetHoverTime 设置列表视图控件的当前逗留时间
*** 作 InsertItem 在列表视图控件中插入一个新项
DeleteItem 从控件中删除一项
DeleteAllItems 从控件中删除所有项
FindItem 查找具有指定的字符的列表视图项
SortItems 使用应用定义的比较函数排序列表视图项
HitTest 指定哪个列表视图在指定的位置上
EnsureVisible 保证项是可见的
Scroll 滚动列表视图控件的内容
ReDrawItems 强迫列表视图控件刷新一些项
Update 强迫控件刷新一个指定的项
Arrange 调整一栏里的项
EditLabel 开始项文本该处编辑
InsertColumn 插入列表视图控件中的新列
DeleteColumn 从列表视图控件中删除一列
CreateDragImage 为指定的项构造一个拖动图象列表
可覆盖的函数 DrawItem 当自绘制控件的可视部分改变时被调用
如果在VS下开发上位机,NI的MS控件集绝对是不错的。可惜MS2015一直不支持vs2017,5月份发布的MS2019全面支持VS2017和VS2019,同时拥有wpf控件。
按钮、指示灯、仪表盘控件开源也很多,但NI的曲线显示控件应该是非常优秀的,LV和CVI中都有体现。
MS2019可视控件基本如下,这是原生设置,如果懂点美工配色,应该非常不错:
欢迎交流QQ:491114509
可以通过给控件注册监听视图树的观察者来获取控件的大小
代码如下
public class MainActivity extends Activity {private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutactivity_main);
tv = (TextView) findViewById(Ridtext);
tvgetViewTreeObserver()addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//在这里获取到宽高
int width = tvgetMeasuredWidth();
int height = tvgetMeasuredHeight();
}
});
}
}
ViewTreeObserver 是一个注册监听视图树的观察者(observer),在视图树种全局事件改变时得到通知。
而OnGlobalLayoutListener是当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时的回调接口
获取屏幕宽高代码如下
DisplayMetrics dm = getResources()getDisplayMetrics();int screenWidth = dmwidthPixels;//屏幕宽度
int screenHeight = dmheightPixels;//屏幕高度
两者都获取到了,就可以进行判断了
以上就是关于如何使用AutoIT完成单机测试全部的内容,包括:如何使用AutoIT完成单机测试、MFC VC++怎么在自己创建的cpp里得到控件check的状态、MFC对话框输出信息表示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)