VS2010测试功能之旅
——编码的UI测试系列之二:操作动作的录制原理(上)
RealZhao,2011年2月18日
回顾
在之前我们介绍了如何用VS2010的UI测试功能创建一个简单的示例,大致描述了如何使用编码的UI测试进行录制和回放,在这章会着重描述VS2010是如何录制操作,并且生成代码,以及初步介绍如何通过自己写代码的方式进行测试。
内容简介
在上一章我们已经介绍过,建立一个编码的UI测试CodedUITest1.cs,录制完成之后,会自动生成一个UIMap1.uitest文件
图1:录制完成后自动生成的UIMap1.uitest文件
事实上,在录制过程中起着关键作用的并非是CodedUITest1.cs,而是UIMap1.uitest,在录制过程中的所有代码都是生成在UIMap1.uitest,所有对于界面的操作,测试的判断也是在UIMap1.uitest文件完成,CodedUITest1.cs仅仅只是调用UIMap1.uitest中的方法(换言之只是个躯壳,编码的UI测试的灵魂还是在UIMap1.uitest)
明白此点之后,接下来我们只需着重研究研究UIMap1.uitest即可,看看他是如何录制并生成代码的
注:这一章的内容可能较之第一章比较难,在阅读的时候可尽量使用VS2010进行操作,便于理解。由于本章内容较长,分为两个部分,上部分介绍原理,下部分介绍通过修改UIMap1.uitest控制操作步骤代码的生成,预计在周六或者周日发出
UIMap的录制与生成
首先我们新建一个测试项目
图2:新建项目
建成之后,(可以看到系统自动默认生成了一个UnitTest.cs,我们可以先将它删除),右击该项目,选择添加à添加新项(注意,不是添加测试,是添加新项),在新项中选择Coded UI Test Map(编码的UI测试映射)
图3:添加编码的UI测试映射
现在我们建立了一个UIMap1.uitest(可以看到这个UIMap1.uitest还没有生成UIMap1.cs和UIMap1.Designer.cs)
图4:UIMap1.uitest
可以双击打开UIMap1.uitest,文件里面没有什么特殊的内容
<?xml version="1.0"?>
<UITest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="" Id="3efe829a-76df-439e-af0d-8d5c62727a1e" AssemblyVersion="10.0.21008.0" Version="1.0" xmlns="http://schemas.microsoft.com/VisualStudio/TeamTest/UITest/2010">
</UITest>
右击该UIMap1.uitest,选则Edit With Coded UI Test Builder(使用编码的UI测试生成器进行编辑),接下来会弹出录制操作用的生成器
图5:Edit With Coded UI Test Builder
我们还是按照上一章中使用的示例程序和操作步骤进行录制四个方法InputErrorUidPwd()、AssertErrorWinow()、InputRightUidPwd()、AssertRightWinow(),(可再添加一个方法CloseWindow(),关闭这个示例程序,上一章没有提到)操作完毕之后,生成代码,我们可以看到UIMap1.cs和UIMap1.Designer.cs已经自动生成,而实际有生成代码的文件为UIMap1.uitest和UIMap1.Designer.cs,UIMap1.cs则为空
现在可以一个个进去看看生成的代码(注:由于录制过程中的操作步骤每个人都可能有细微差别,例如点击坐标,这里我录的示例和大家实验的时候自己录的可能存在一些区别,你懂的)
首先是UIMap1.uitest,大家可以看到这里的代码实在是多得看不清,如果觉得阅读比较困难,可以跳过此段,先看看解释说明,然后再回来看
UIMap.uitest
1
<?
xml version="1.0"
?>
2
<
UITest
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
Name
=""
Id
="3efe829a-76df-439e-af0d-8d5c62727a1e"
AssemblyVersion
="10.0.21008.0"
Version
="1.0"
xmlns
="http://schemas.microsoft.com/VisualStudio/TeamTest/UITest/2010"
>
3
<
Configuration
>
4
<
Group
Name
="IE"
>
5
<
Setting
Name
="Version"
Value
="8.0.6001.18702"
WarningLevel
="1"
/>
6
<
Setting
Name
="InformationBar"
WarningLevel
="1"
/>
7
<
Setting
Name
="AutoCompletePassword"
WarningLevel
="1"
/>
8
<
Setting
Name
="AutoCompleteForm"
Value
="no"
WarningLevel
="1"
/>
9
<
Setting
Name
="DefaultBrowser"
Value
="IEXPLORE.EXE"
WarningLevel
="1"
/>
10
<
Setting
Name
="PopupBlocker"
Value
="1"
WarningLevel
="1"
/>
11
<
Setting
Name
="TabbedBrowsing"
Value
="0"
WarningLevel
="2"
/>
12
<
Setting
Name
="InternetZoneSecurity"
Value
="66816"
WarningLevel
="2"
/>
13
<
Setting
Name
="IntranetZoneSecurity"
Value
="69632"
WarningLevel
="2"
/>
14
<
Setting
Name
="TrustedZoneSecurity"
Value
="70912"
WarningLevel
="2"
/>
15
<
Setting
Name
="RestrictedZoneSecurity"
Value
="73728"
WarningLevel
="2"
/>
16
<
Setting
Name
="PhishingFilter"
WarningLevel
="1"
/>
17
<
Setting
Name
="EnhancedSecurityConfiguration"
WarningLevel
="1"
/>
18
</
Group
>
19
<
Group
Name
="OS"
>
20
<
Setting
Name
="Name"
Value
="Microsoft Windows XP Professional"
WarningLevel
="2"
/>
21
<
Setting
Name
="Version"
Value
="Microsoft Windows NT 5.1.2600 Service Pack 3"
WarningLevel
="2"
/>
22
<
Setting
Name
="IsUserAdmin"
Value
="True"
WarningLevel
="2"
/>
23
<
Setting
Name
="Is64BitOperatingSystem"
Value
="False"
WarningLevel
="2"
/>
24
<
Setting
Name
="IsTerminalServerSession"
Value
="False"
WarningLevel
="2"
/>
25
<
Setting
Name
="OSLanguage"
Value
="1033"
WarningLevel
="1"
/>
26
<
Setting
Name
="UserLocale"
Value
="1033"
WarningLevel
="1"
/>
27
<
Setting
Name
="DragFullWindows"
Value
="True"
WarningLevel
="2"
/>
28
<
Setting
Name
="ScreenResolutionWidth"
Value
="1440"
WarningLevel
="2"
/>
29
<
Setting
Name
="ScreenResolutionHeight"
Value
="900"
WarningLevel
="2"
/>
30
<
Setting
Name
="SystemDPIX"
Value
="96"
WarningLevel
="2"
/>
31
<
Setting
Name
="SystemDPIY"
Value
="96"
WarningLevel
="2"
/>
32
<
Setting
Name
="Aero"
WarningLevel
="1"
/>
33
<
Setting
Name
="UACEnabled"
WarningLevel
="2"
/>
34
<
Setting
Name
="UACPromptEnabled"
WarningLevel
="1"
/>
35
<
Setting
Name
="WindowsAccessibilityAPIVersion"
Value
="2.0"
WarningLevel
="1"
/>
36
</
Group
>
37
<
Group
Name
="TechnologyManagers"
>
38
<
Setting
Name
="Web"
WarningLevel
="1"
/>
39
<
Setting
Name
="UIA"
WarningLevel
="1"
/>
40
</
Group
>
41
</
Configuration
>
42
<
InitializeActions
/>
43
<
ExecuteActions
>
44
<
SetValueAction
UIObjectName
="UIMap1.UI系统登录Window.UITbx_uidWindow.UITbx_uidEdit"
>
45
<
ParameterName
/>
46
<
Value
Encoded
="false"
>
errorUid
</
Value
>
47
<
Type
>
String
</
Type
>
48
</
SetValueAction
>
49
<
SetValueAction
UIObjectName
="UIMap1.UI系统登录Window.UITbx_pwdWindow.UITbx_pwdEdit"
>
50
<
ParameterName
/>
51
<
Value
Encoded
="false"
>
errorPwd
</
Value
>
52
<
Type
>
String
</
Type
>
53
</
SetValueAction
>
54
<
MouseAction
UIObjectName
="UIMap1.UI系统登录Window.UI登录Window.UI登录Button"
>
55
<
ParameterName
/>
56
<
ModifierKeys
>
None
</
ModifierKeys
>
57
<
IsGlobalHotkey
>
false
</
IsGlobalHotkey
>
58
<
Location
X
="25"
Y
="6"
/>
59
<
WheelDirection
>
0
</
WheelDirection
>
60
<
ActionType
>
Click
</
ActionType
>
61
<
MouseButton
>
Left
</
MouseButton
>
62
</
MouseAction
>
63
<
TestStepMarkerAction
MarkerInformation
="InputErrorUidPwd"
>
64
<
ParameterName
/>
65
<
StepId
>
-1
</
StepId
>
66
<
Direction
>
Start
</
Direction
>
67
<
Outcome
/>
68
<
Disabled
>
false
</
Disabled
>
69
<
WorkItemId
>
0
</
WorkItemId
>
70
<
MarkerRegionType
>
Action
</
MarkerRegionType
>
71
</
TestStepMarkerAction
>
72
<
AssertAction
UIObjectName
="UIMap.UI提示Window.UI用户名或密码错误Window.UI用户名或密码错误Text"
>
73
<
ParameterName
/>
74
<
PropertyName
>
Exists
</
PropertyName
>
75
<
ExpectedValue
>
True
</
ExpectedValue
>
76
<
Type
>
Boolean
</
Type
>
77
<
PropertyCondition
>
AreEqual
</
PropertyCondition
>
78
</
AssertAction
>
79
<
TestStepMarkerAction
MarkerInformation
="AssertErrorWinow"
>
80
<
ParameterName
/>
81
<
StepId
>
-1
</
StepId
>
82
<
Direction
>
Start
</
Direction
>
83
<
Outcome
/>
84
<
Disabled
>
false
</
Disabled
>
85
<
WorkItemId
>
0
</
WorkItemId
>
86
<
MarkerRegionType
>
Assertion
</
MarkerRegionType
>
87
</
TestStepMarkerAction
>
88
<
MouseAction
UIObjectName
="UIMap1.UI提示Window.UIOKWindow.UIOKButton"
>
89
<
ParameterName
/>
90
<
ModifierKeys
>
None
</
ModifierKeys
>
91
<
IsGlobalHotkey
>
false
</
IsGlobalHotkey
>
92
<
Location
X
="22"
Y
="19"
/>
93
<
WheelDirection
>
0
</
WheelDirection
>
94
<
ActionType
>
Click
</
ActionType
>
95
<
MouseButton
>
Left
</
MouseButton
>
96
</
MouseAction
>
97
<
SetValueAction
UIObjectName
="UIMap1.UI系统登录Window.UITbx_uidWindow.UITbx_uidEdit"
>
98
<
ParameterName
/>
99
<
Value
Encoded
="false"
>
Admin
</
Value
>
100
<
Type
>
String
</
Type
>
101
</
SetValueAction
>
102
<
SetValueAction
UIObjectName
="UIMap1.UI系统登录Window.UITbx_pwdWindow.UITbx_pwdEdit"
>
103
<
ParameterName
/>
104
<
Value
Encoded
="false"
>
123456
</
Value
>
105
<
Type
>
String
</
Type
>
106
</
SetValueAction
>
107
<
MouseAction
UIObjectName
="UIMap1.UI系统登录Window.UI登录Window.UI登录Button"
>
108
<
ParameterName
/>
109
<
ModifierKeys
>
None
</
ModifierKeys
>
110
<
IsGlobalHotkey
>
false
</
IsGlobalHotkey
>
111
<
Location
X
="39"
Y
="8"
/>
112
<
WheelDirection
>
0
</
WheelDirection
>
113
<
ActionType
>
Click
</
ActionType
>
114
<
MouseButton
>
Left
</
MouseButton
>
115
</
MouseAction
>
116
<
TestStepMarkerAction
MarkerInformation
="InputRightUidPwd"
>
117
<
ParameterName
/>
118
<
StepId
>
-1
</
StepId
>
119
<
Direction
>
Start
</
Direction
>
120
<
Outcome
/>
121
<
Disabled
>
false
</
Disabled
>
122
<
WorkItemId
>
0
</
WorkItemId
>
123
<
MarkerRegionType
>
Action
</
MarkerRegionType
>
124
</
TestStepMarkerAction
>
125
<
AssertAction
UIObjectName
="UIMap.UI提示Window.UI用户名或密码错误Window.UI登陆成功Text"
>
126
<
ParameterName
/>
127
<
PropertyName
>
Exists
</
PropertyName
>
128
<
ExpectedValue
>
True
</
ExpectedValue
>
129
<
Type
>
Boolean
</
Type
>
130
<
PropertyCondition
>
AreEqual
</
PropertyCondition
>
131
</
AssertAction
>
132
<
TestStepMarkerAction
MarkerInformation
="AssertRightWinow"
>
133
<
ParameterName
/>
134
<
StepId
>
-1
</
StepId
>
135
<
Direction
>
Start
</
Direction
>
136
<
Outcome
/>
137
<
Disabled
>
false
</
Disabled
>
138
<
WorkItemId
>
0
</
WorkItemId
>
139
<
MarkerRegionType
>
Assertion
</
MarkerRegionType
>
140
</
TestStepMarkerAction
>
141
<
MouseAction
UIObjectName
="UIMap1.UI提示Window.UIOKWindow.UIOKButton"
>
142
<
ParameterName
/>
143
<
ModifierKeys
>
None
</
ModifierKeys
>
144
<
IsGlobalHotkey
>
false
</
IsGlobalHotkey
>
145
<
Location
X
="28"
Y
="13"
/>
146
<
WheelDirection
>
0
</
WheelDirection
>
147
<
ActionType
>
Click
</
ActionType
>
148
<
MouseButton
>
Left
</
MouseButton
>
149
</
MouseAction
>
150
<
MouseAction
UIObjectName
="UIMap1.UI系统登录Window.UI系统登录TitleBar.UICloseButton"
>
151
<
ParameterName
/>
152
<
ModifierKeys
>
None
</
ModifierKeys
>
153
<
IsGlobalHotkey
>
false
</
IsGlobalHotkey
>
154
<
Location
X
="9"
Y
="11"
/>
155
<
WheelDirection
>
0
</
WheelDirection
>
156
<
ActionType
>
Click
</
ActionType
>
157
<
MouseButton
>
Left
</
MouseButton
>
158
</
MouseAction
>
159
<
TestStepMarkerAction
MarkerInformation
="CloseWindow"
>
160
<
ParameterName
/>
161
<
StepId
>
-1
</
StepId
>
162
<
Direction
>
Start
</
Direction
>
163
<
Outcome
/>
164
<
Disabled
>
false
</
Disabled
>
165
<
WorkItemId
>
0
</
WorkItemId
>
166
<
MarkerRegionType
>
Action
</
MarkerRegionType
>
167
</
TestStepMarkerAction
>
168
</
ExecuteActions
>
169
<
CleanupActions
/>
170
<
OnErrorActions
/>
171
<
Maps
>
172
<
UIMap
Id
="UIMap1"
>
173
<
TopLevelWindows
>
174
<
TopLevelWindow
ControlType
="Window"
Id
="UI系统登录Window"
FriendlyName
="系统登录"
SpecialControlType
="None"
SessionId
="154362"
>
175
<
TechnologyName
>
MSAA
</
TechnologyName
>
176
<
WindowTitles
>
177
<
WindowTitle
>
系统登录
</
WindowTitle
>
178
</
WindowTitles
>
179
<
SearchConfigurations
>
180
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
181
</
SearchConfigurations
>
182
<
AndCondition
Id
="SearchCondition"
>
183
<
PropertyCondition
Name
="Name"
>
系统登录
</
PropertyCondition
>
184
<
PropertyCondition
Name
="ClassName"
Operator
="Contains"
>
WindowsForms10.Window
</
PropertyCondition
>
185
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
186
</
AndCondition
>
187
<
SupportLevel
>
0
</
SupportLevel
>
188
<
Descendants
>
189
<
UIObject
ControlType
="Window"
Id
="UITbx_uidWindow"
FriendlyName
="Tbx_uid"
SpecialControlType
="None"
>
190
<
TechnologyName
>
MSAA
</
TechnologyName
>
191
<
WindowTitles
>
192
<
WindowTitle
>
系统登录
</
WindowTitle
>
193
</
WindowTitles
>
194
<
SearchConfigurations
>
195
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
196
</
SearchConfigurations
>
197
<
AndCondition
Id
="SearchCondition"
>
198
<
PropertyCondition
Name
="ControlName"
>
Tbx_uid
</
PropertyCondition
>
199
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
200
</
AndCondition
>
201
<
SupportLevel
>
0
</
SupportLevel
>
202
<
Descendants
>
203
<
UIObject
ControlType
="Edit"
Id
="UITbx_uidEdit"
FriendlyName
="Tbx_uid"
SpecialControlType
="None"
>
204
<
TechnologyName
>
MSAA
</
TechnologyName
>
205
<
WindowTitles
>
206
<
WindowTitle
>
系统登录
</
WindowTitle
>
207
</
WindowTitles
>
208
<
SearchConfigurations
>
209
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
210
</
SearchConfigurations
>
211
<
AndCondition
Id
="SearchCondition"
>
212
<
PropertyCondition
Name
="Name"
>
密码 :
</
PropertyCondition
>
213
<
PropertyCondition
Name
="ControlType"
>
Edit
</
PropertyCondition
>
214
</
AndCondition
>
215
<
SupportLevel
>
0
</
SupportLevel
>
216
<
Descendants
/>
217
</
UIObject
>
218
</
Descendants
>
219
</
UIObject
>
220
<
UIObject
ControlType
="Window"
Id
="UITbx_pwdWindow"
FriendlyName
="Tbx_pwd"
SpecialControlType
="None"
>
221
<
TechnologyName
>
MSAA
</
TechnologyName
>
222
<
WindowTitles
>
223
<
WindowTitle
>
系统登录
</
WindowTitle
>
224
</
WindowTitles
>
225
<
SearchConfigurations
>
226
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
227
</
SearchConfigurations
>
228
<
AndCondition
Id
="SearchCondition"
>
229
<
PropertyCondition
Name
="ControlName"
>
Tbx_pwd
</
PropertyCondition
>
230
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
231
</
AndCondition
>
232
<
SupportLevel
>
0
</
SupportLevel
>
233
<
Descendants
>
234
<
UIObject
ControlType
="Edit"
Id
="UITbx_pwdEdit"
FriendlyName
="Tbx_pwd"
SpecialControlType
="None"
>
235
<
TechnologyName
>
MSAA
</
TechnologyName
>
236
<
WindowTitles
>
237
<
WindowTitle
>
系统登录
</
WindowTitle
>
238
</
WindowTitles
>
239
<
SearchConfigurations
>
240
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
241
</
SearchConfigurations
>
242
<
AndCondition
Id
="SearchCondition"
>
243
<
PropertyCondition
Name
="ControlType"
>
Edit
</
PropertyCondition
>
244
</
AndCondition
>
245
<
SupportLevel
>
0
</
SupportLevel
>
246
<
Descendants
/>
247
</
UIObject
>
248
</
Descendants
>
249
</
UIObject
>
250
<
UIObject
ControlType
="Window"
Id
="UI登录Window"
FriendlyName
="登录"
SpecialControlType
="None"
>
251
<
TechnologyName
>
MSAA
</
TechnologyName
>
252
<
WindowTitles
>
253
<
WindowTitle
>
系统登录
</
WindowTitle
>
254
</
WindowTitles
>
255
<
SearchConfigurations
>
256
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
257
</
SearchConfigurations
>
258
<
AndCondition
Id
="SearchCondition"
>
259
<
PropertyCondition
Name
="ControlName"
>
Btn_Login
</
PropertyCondition
>
260
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
261
</
AndCondition
>
262
<
SupportLevel
>
0
</
SupportLevel
>
263
<
Descendants
>
264
<
UIObject
ControlType
="Button"
Id
="UI登录Button"
FriendlyName
="登录"
SpecialControlType
="None"
>
265
<
TechnologyName
>
MSAA
</
TechnologyName
>
266
<
WindowTitles
>
267
<
WindowTitle
>
系统登录
</
WindowTitle
>
268
</
WindowTitles
>
269
<
SearchConfigurations
>
270
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
271
</
SearchConfigurations
>
272
<
AndCondition
Id
="SearchCondition"
>
273
<
PropertyCondition
Name
="Name"
>
登录
</
PropertyCondition
>
274
<
PropertyCondition
Name
="ControlType"
>
Button
</
PropertyCondition
>
275
</
AndCondition
>
276
<
SupportLevel
>
0
</
SupportLevel
>
277
<
Descendants
/>
278
</
UIObject
>
279
</
Descendants
>
280
</
UIObject
>
281
<
UIObject
ControlType
="TitleBar"
Id
="UI系统登录TitleBar"
FriendlyName
="系统登录"
SpecialControlType
="None"
>
282
<
TechnologyName
>
MSAA
</
TechnologyName
>
283
<
WindowTitles
>
284
<
WindowTitle
>
系统登录
</
WindowTitle
>
285
</
WindowTitles
>
286
<
SearchConfigurations
>
287
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
288
</
SearchConfigurations
>
289
<
AndCondition
Id
="SearchCondition"
>
290
<
PropertyCondition
Name
="ControlType"
>
TitleBar
</
PropertyCondition
>
291
</
AndCondition
>
292
<
SupportLevel
>
0
</
SupportLevel
>
293
<
Descendants
>
294
<
UIObject
ControlType
="Button"
Id
="UICloseButton"
FriendlyName
="Close"
SpecialControlType
="None"
>
295
<
TechnologyName
>
MSAA
</
TechnologyName
>
296
<
WindowTitles
>
297
<
WindowTitle
>
系统登录
</
WindowTitle
>
298
</
WindowTitles
>
299
<
SearchConfigurations
>
300
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
301
</
SearchConfigurations
>
302
<
AndCondition
Id
="SearchCondition"
>
303
<
PropertyCondition
Name
="Name"
>
Close
</
PropertyCondition
>
304
<
PropertyCondition
Name
="ControlType"
>
Button
</
PropertyCondition
>
305
</
AndCondition
>
306
<
SupportLevel
>
0
</
SupportLevel
>
307
<
Descendants
/>
308
</
UIObject
>
309
</
Descendants
>
310
</
UIObject
>
311
</
Descendants
>
312
</
TopLevelWindow
>
313
<
TopLevelWindow
ControlType
="Window"
Id
="UI提示Window"
FriendlyName
="提示"
SpecialControlType
="None"
SessionId
="1203022"
>
314
<
TechnologyName
>
MSAA
</
TechnologyName
>
315
<
WindowTitles
>
316
<
WindowTitle
>
提示
</
WindowTitle
>
317
</
WindowTitles
>
318
<
SearchConfigurations
>
319
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
320
</
SearchConfigurations
>
321
<
AndCondition
Id
="SearchCondition"
>
322
<
PropertyCondition
Name
="Name"
>
提示
</
PropertyCondition
>
323
<
PropertyCondition
Name
="ClassName"
>
#32770
</
PropertyCondition
>
324
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
325
</
AndCondition
>
326
<
SupportLevel
>
1
</
SupportLevel
>
327
<
Descendants
>
328
<
UIObject
ControlType
="Window"
Id
="UI用户名或密码错误Window"
FriendlyName
="用户名或密码错误!"
SpecialControlType
="None"
>
329
<
TechnologyName
>
MSAA
</
TechnologyName
>
330
<
WindowTitles
>
331
<
WindowTitle
>
提示
</
WindowTitle
>
332
</
WindowTitles
>
333
<
SearchConfigurations
>
334
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
335
</
SearchConfigurations
>
336
<
AndCondition
Id
="SearchCondition"
>
337
<
PropertyCondition
Name
="ControlId"
>
65535
</
PropertyCondition
>
338
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
339
</
AndCondition
>
340
<
SupportLevel
>
1
</
SupportLevel
>
341
<
Descendants
>
342
<
UIObject
ControlType
="Text"
Id
="UI用户名或密码错误Text"
FriendlyName
="用户名或密码错误!"
SpecialControlType
="None"
>
343
<
TechnologyName
>
MSAA
</
TechnologyName
>
344
<
WindowTitles
>
345
<
WindowTitle
>
提示
</
WindowTitle
>
346
</
WindowTitles
>
347
<
SearchConfigurations
>
348
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
349
</
SearchConfigurations
>
350
<
AndCondition
Id
="SearchCondition"
>
351
<
PropertyCondition
Name
="Name"
>
用户名或密码错误!
</
PropertyCondition
>
352
<
PropertyCondition
Name
="ControlType"
>
Text
</
PropertyCondition
>
353
</
AndCondition
>
354
<
SupportLevel
>
1
</
SupportLevel
>
355
<
Descendants
/>
356
</
UIObject
>
357
<
UIObject
ControlType
="Text"
Id
="UI登陆成功Text"
FriendlyName
="登陆成功!"
SpecialControlType
="None"
>
358
<
TechnologyName
>
MSAA
</
TechnologyName
>
359
<
WindowTitles
>
360
<
WindowTitle
>
提示
</
WindowTitle
>
361
</
WindowTitles
>
362
<
SearchConfigurations
>
363
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
364
</
SearchConfigurations
>
365
<
AndCondition
Id
="SearchCondition"
>
366
<
PropertyCondition
Name
="Name"
>
登陆成功!
</
PropertyCondition
>
367
<
PropertyCondition
Name
="ControlType"
>
Text
</
PropertyCondition
>
368
</
AndCondition
>
369
<
SupportLevel
>
1
</
SupportLevel
>
370
<
Descendants
/>
371
</
UIObject
>
372
</
Descendants
>
373
</
UIObject
>
374
<
UIObject
ControlType
="Window"
Id
="UIOKWindow"
FriendlyName
="OK"
SpecialControlType
="None"
>
375
<
TechnologyName
>
MSAA
</
TechnologyName
>
376
<
WindowTitles
>
377
<
WindowTitle
>
提示
</
WindowTitle
>
378
</
WindowTitles
>
379
<
SearchConfigurations
>
380
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
381
</
SearchConfigurations
>
382
<
AndCondition
Id
="SearchCondition"
>
383
<
PropertyCondition
Name
="ControlId"
>
2
</
PropertyCondition
>
384
<
PropertyCondition
Name
="ControlType"
>
Window
</
PropertyCondition
>
385
</
AndCondition
>
386
<
SupportLevel
>
0
</
SupportLevel
>
387
<
Descendants
>
388
<
UIObject
ControlType
="Button"
Id
="UIOKButton"
FriendlyName
="OK"
SpecialControlType
="None"
>
389
<
TechnologyName
>
MSAA
</
TechnologyName
>
390
<
WindowTitles
>
391
<
WindowTitle
>
提示
</
WindowTitle
>
392
</
WindowTitles
>
393
<
SearchConfigurations
>
394
<
SearchConfiguration
>
VisibleOnly
</
SearchConfiguration
>
395
</
SearchConfigurations
>
396
<
AndCondition
Id
="SearchCondition"
>
397
<
PropertyCondition
Name
="Name"
>
OK
</
PropertyCondition
>
398
<
PropertyCondition
Name
="ControlType"
>
Button
</
PropertyCondition
>
399
</
AndCondition
>
400
<
SupportLevel
>
0
</
SupportLevel
>
401
<
Descendants
/>
402
</
UIObject
>
403
</
Descendants
>
404
</
UIObject
>
405
</
Descendants
>
406
</
TopLevelWindow
>
407
</
TopLevelWindows
>
408
</
UIMap
>
409
</
Maps
>
410
<
ValueMap
>
411
<
ParameterList
/>
412
</
ValueMap
>
413
</
UITest
>
其实UIMap1.uitest这个XML的文件结构如下
<UITest>
<Configuration>… </Configuration>
<InitializeActions>…</InitializeActions>
<ExecuteActions>…</ExecuteActions>
<CleanupActions>…</CleanupActions>
<OnErrorActions>…</OnErrorActions>
<Maps>…</Maps>
<ValueMap>…</ValueMap>
</UITest>
这里做一个简单的说明:
Configuration:是对环境进行一个描述和配置,对测试几乎没有影响,可以忽略
InitializeActions,ExecuteActions,CleanupActions,OnErrorAction:其中InitializeActions指初始化需要执行的操作,ExecuteActions指测试过程中的操作(目前我们所通过录制所生成的操作都默认放在ExecuteActions,大家现在可以回过去仔细看看ExecuteActions节点的内容),CleanupActions指测试完毕需要清理资源的Actions,而OnErrorAction则指代异常处理Actions
Maps:是我们需要关注的对象库,我们操作过程中所识别的所有控件都是会存放到这里的,对象识别我会在第三章的时候提及
ValueMap:是值映射,类似于参数记载,实际功能也不是特别大
在这些节点中,真正起到实际作用的是Actions和Maps
之后我们再来查看UIMap1.Designer.cs,同样,觉得会看晕的可直接跳过,之后回来再看
UIMap1.Designer.cs
1
//
------------------------------------------------------------------------------
2
//
<auto-generated>
3
//
This code was generated by coded UI test builder.
4
//
Version: 10.0.0.0
5
//
6
//
Changes to this file may cause incorrect behavior and will be lost if
7
//
the code is regenerated.
8
//
</auto-generated>
9
//
------------------------------------------------------------------------------
10
11
namespace
TestProject1.UIMap1Classes
12
{
13
using
System;
14
using
System.CodeDom.Compiler;
15
using
System.Collections.Generic;
16
using
System.Drawing;
17
using
System.Text.RegularExpressions;
18
using
System.Windows.Input;
19
using
Microsoft.VisualStudio.TestTools.UITest.Extension;
20
using
Microsoft.VisualStudio.TestTools.UITesting;
21
using
Microsoft.VisualStudio.TestTools.UITesting.WinControls;
22
using
Microsoft.VisualStudio.TestTools.UnitTesting;
23
using
Keyboard
=
Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
24
using
Mouse
=
Microsoft.VisualStudio.TestTools.UITesting.Mouse;
25
using
MouseButtons
=
System.Windows.Forms.MouseButtons;
26
27
28
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
29
public
partial
class
UIMap1
30
{
31
32
///
<summary>
33
///
InputErrorUidPwd - Use 'InputErrorUidPwdParams' to pass parameters into this method.
34
///
</summary>
35
public
void
InputErrorUidPwd()
36
{
37
#region
Variable Declarations
38
WinEdit uITbx_uidEdit
=
this
.UI系统登录Window.UITbx_uidWindow.UITbx_uidEdit;
39
WinEdit uITbx_pwdEdit
=
this
.UI系统登录Window.UITbx_pwdWindow.UITbx_pwdEdit;
40
WinButton uI登录Button
=
this
.UI系统登录Window.UI登录Window.UI登录Button;
41
#endregion
42
43
//
Type 'errorUid' in 'Tbx_uid' text box
44
uITbx_uidEdit.Text
=
this
.InputErrorUidPwdParams.UITbx_uidEditText;
45
46
//
Type 'errorPwd' in 'Tbx_pwd' text box
47
uITbx_pwdEdit.Text
=
this
.InputErrorUidPwdParams.UITbx_pwdEditText;
48
49
//
Click '登录' button
50
Mouse.Click(uI登录Button,
new
Point(
25
,
6
));
51
}
52
53
///
<summary>
54
///
AssertErrorWinow - Use 'AssertErrorWinowExpectedValues' to pass parameters into this method.
55
///
</summary>
56
public
void
AssertErrorWinow()
57
{
58
#region
Variable Declarations
59
WinText uI用户名或密码错误Text
=
this
.UI提示Window.UI用户名或密码错误Window.UI用户名或密码错误Text;
60
#endregion
61
62
//
Verify that '用户名或密码错误!' label's property 'Exists' equals 'True'
63
Assert.AreEqual(
this
.AssertErrorWinowExpectedValues.UI用户名或密码错误TextExists, uI用户名或密码错误Text.Exists);
64
}
65
66
///
<summary>
67
///
InputRightUidPwd - Use 'InputRightUidPwdParams' to pass parameters into this method.
68
///
</summary>
69
public
void
InputRightUidPwd()
70
{
71
#region
Variable Declarations
72
WinButton uIOKButton
=
this
.UI提示Window.UIOKWindow.UIOKButton;
73
WinEdit uITbx_uidEdit
=
this
.UI系统登录Window.UITbx_uidWindow.UITbx_uidEdit;
74
WinEdit uITbx_pwdEdit
=
this
.UI系统登录Window.UITbx_pwdWindow.UITbx_pwdEdit;
75
WinButton uI登录Button
=
this
.UI系统登录Window.UI登录Window.UI登录Button;
76
#endregion
77
78
//
Click 'OK' button
79
Mouse.Click(uIOKButton,
new
Point(
22
,
19
));
80
81
//
Type 'Admin' in 'Tbx_uid' text box
82
uITbx_uidEdit.Text
=
this
.InputRightUidPwdParams.UITbx_uidEditText;
83
84
//
Type '123456' in 'Tbx_pwd' text box
85
uITbx_pwdEdit.Text
=
this
.InputRightUidPwdParams.UITbx_pwdEditText;
86
87
//
Click '登录' button
88
Mouse.Click(uI登录Button,
new
Point(
39
,
8
));
89
}
90
91
///
<summary>
92
///
AssertRightWinow - Use 'AssertRightWinowExpectedValues' to pass parameters into this method.
93
///
</summary>
94
public
void
AssertRightWinow()
95
{
96
#region
Variable Declarations
97
WinText uI登陆成功Text
=
this
.UI提示Window.UI用户名或密码错误Window.UI登陆成功Text;
98
#endregion
99
100
//
Verify that '登陆成功!' label's property 'Exists' equals 'True'
101
Assert.AreEqual(
this
.AssertRightWinowExpectedValues.UI登陆成功TextExists, uI登陆成功Text.Exists);
102
}
103
104
///
<summary>
105
///
CloseWindow
106
///
</summary>
107
public
void
CloseWindow()
108
{
109
#region
Variable Declarations
110
WinButton uIOKButton
=
this
.UI提示Window.UIOKWindow.UIOKButton;
111
WinButton uICloseButton
=
this
.UI系统登录Window.UI系统登录TitleBar.UICloseButton;
112
#endregion
113
114
//
Click 'OK' button
115
Mouse.Click(uIOKButton,
new
Point(
28
,
13
));
116
117
//
Click 'Close' button
118
Mouse.Click(uICloseButton,
new
Point(
9
,
11
));
119
}
120
121
#region
Properties
122
public
virtual
InputErrorUidPwdParams InputErrorUidPwdParams
123
{
124
get
125
{
126
if
((
this
.mInputErrorUidPwdParams
==
null
))
127
{
128
this
.mInputErrorUidPwdParams
=
new
InputErrorUidPwdParams();
129
}
130
return
this
.mInputErrorUidPwdParams;
131
}
132
}
133
134
public
virtual
AssertErrorWinowExpectedValues AssertErrorWinowExpectedValues
135
{
136
get
137
{
138
if
((
this
.mAssertErrorWinowExpectedValues
==
null
))
139
{
140
this
.mAssertErrorWinowExpectedValues
=
new
AssertErrorWinowExpectedValues();
141
}
142
return
this
.mAssertErrorWinowExpectedValues;
143
}
144
}
145
146
public
virtual
InputRightUidPwdParams InputRightUidPwdParams
147
{
148
get
149
{
150
if
((
this
.mInputRightUidPwdParams
==
null
))
151
{
152
this
.mInputRightUidPwdParams
=
new
InputRightUidPwdParams();
153
}
154
return
this
.mInputRightUidPwdParams;
155
}
156
}
157
158
public
virtual
AssertRightWinowExpectedValues AssertRightWinowExpectedValues
159
{
160
get
161
{
162
if
((
this
.mAssertRightWinowExpectedValues
==
null
))
163
{
164
this
.mAssertRightWinowExpectedValues
=
new
AssertRightWinowExpectedValues();
165
}
166
return
this
.mAssertRightWinowExpectedValues;
167
}
168
}
169
170
public
UI系统登录Window UI系统登录Window
171
{
172
get
173
{
174
if
((
this
.mUI系统登录Window
==
null
))
175
{
176
this
.mUI系统登录Window
=
new
UI系统登录Window();
177
}
178
return
this
.mUI系统登录Window;
179
}
180
}
181
182
public
UI提示Window UI提示Window
183
{
184
get
185
{
186
if
((
this
.mUI提示Window
==
null
))
187
{
188
this
.mUI提示Window
=
new
UI提示Window();
189
}
190
return
this
.mUI提示Window;
191
}
192
}
193
#endregion
194
195
#region
Fields
196
private
InputErrorUidPwdParams mInputErrorUidPwdParams;
197
198
private
AssertErrorWinowExpectedValues mAssertErrorWinowExpectedValues;
199
200
private
InputRightUidPwdParams mInputRightUidPwdParams;
201
202
private
AssertRightWinowExpectedValues mAssertRightWinowExpectedValues;
203
204
private
UI系统登录Window mUI系统登录Window;
205
206
private
UI提示Window mUI提示Window;
207
#endregion
208
}
209
210
///
<summary>
211
///
Parameters to be passed into 'InputErrorUidPwd'
212
///
</summary>
213
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
214
public
class
InputErrorUidPwdParams
215
{
216
217
#region
Fields
218
///
<summary>
219
///
Type 'errorUid' in 'Tbx_uid' text box
220
///
</summary>
221
public
string
UITbx_uidEditText
=
"
errorUid
"
;
222
223
///
<summary>
224
///
Type 'errorPwd' in 'Tbx_pwd' text box
225
///
</summary>
226
public
string
UITbx_pwdEditText
=
"
errorPwd
"
;
227
#endregion
228
}
229
230
///
<summary>
231
///
Parameters to be passed into 'AssertErrorWinow'
232
///
</summary>
233
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
234
public
class
AssertErrorWinowExpectedValues
235
{
236
237
#region
Fields
238
///
<summary>
239
///
Verify that '用户名或密码错误!' label's property 'Exists' equals 'True'
240
///
</summary>
241
public
bool
UI用户名或密码错误TextExists
=
true
;
242
#endregion
243
}
244
245
///
<summary>
246
///
Parameters to be passed into 'InputRightUidPwd'
247
///
</summary>
248
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
249
public
class
InputRightUidPwdParams
250
{
251
252
#region
Fields
253
///
<summary>
254
///
Type 'Admin' in 'Tbx_uid' text box
255
///
</summary>
256
public
string
UITbx_uidEditText
=
"
Admin
"
;
257
258
///
<summary>
259
///
Type '123456' in 'Tbx_pwd' text box
260
///
</summary>
261
public
string
UITbx_pwdEditText
=
"
123456
"
;
262
#endregion
263
}
264
265
///
<summary>
266
///
Parameters to be passed into 'AssertRightWinow'
267
///
</summary>
268
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
269
public
class
AssertRightWinowExpectedValues
270
{
271
272
#region
Fields
273
///
<summary>
274
///
Verify that '登陆成功!' label's property 'Exists' equals 'True'
275
///
</summary>
276
public
bool
UI登陆成功TextExists
=
true
;
277
#endregion
278
}
279
280
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
281
public
class
UI系统登录Window : WinWindow
282
{
283
284
public
UI系统登录Window()
285
{
286
#region
Search Criteria
287
this
.SearchProperties[WinWindow.PropertyNames.Name]
=
"
系统登录
"
;
288
this
.SearchProperties.Add(
new
PropertyExpression(WinWindow.PropertyNames.ClassName,
"
WindowsForms10.Window
"
, PropertyExpressionOperator.Contains));
289
this
.WindowTitles.Add(
"
系统登录
"
);
290
#endregion
291
}
292
293
#region
Properties
294
public
UITbx_uidWindow UITbx_uidWindow
295
{
296
get
297
{
298
if
((
this
.mUITbx_uidWindow
==
null
))
299
{
300
this
.mUITbx_uidWindow
=
new
UITbx_uidWindow(
this
);
301
}
302
return
this
.mUITbx_uidWindow;
303
}
304
}
305
306
public
UITbx_pwdWindow UITbx_pwdWindow
307
{
308
get
309
{
310
if
((
this
.mUITbx_pwdWindow
==
null
))
311
{
312
this
.mUITbx_pwdWindow
=
new
UITbx_pwdWindow(
this
);
313
}
314
return
this
.mUITbx_pwdWindow;
315
}
316
}
317
318
public
UI登录Window UI登录Window
319
{
320
get
321
{
322
if
((
this
.mUI登录Window
==
null
))
323
{
324
this
.mUI登录Window
=
new
UI登录Window(
this
);
325
}
326
return
this
.mUI登录Window;
327
}
328
}
329
330
public
UI系统登录TitleBar UI系统登录TitleBar
331
{
332
get
333
{
334
if
((
this
.mUI系统登录TitleBar
==
null
))
335
{
336
this
.mUI系统登录TitleBar
=
new
UI系统登录TitleBar(
this
);
337
}
338
return
this
.mUI系统登录TitleBar;
339
}
340
}
341
#endregion
342
343
#region
Fields
344
private
UITbx_uidWindow mUITbx_uidWindow;
345
346
private
UITbx_pwdWindow mUITbx_pwdWindow;
347
348
private
UI登录Window mUI登录Window;
349
350
private
UI系统登录TitleBar mUI系统登录TitleBar;
351
#endregion
352
}
353
354
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
355
public
class
UITbx_uidWindow : WinWindow
356
{
357
358
public
UITbx_uidWindow(UITestControl searchLimitContainer) :
359
base
(searchLimitContainer)
360
{
361
#region
Search Criteria
362
this
.SearchProperties[WinWindow.PropertyNames.ControlName]
=
"
Tbx_uid
"
;
363
this
.WindowTitles.Add(
"
系统登录
"
);
364
#endregion
365
}
366
367
#region
Properties
368
public
WinEdit UITbx_uidEdit
369
{
370
get
371
{
372
if
((
this
.mUITbx_uidEdit
==
null
))
373
{
374
this
.mUITbx_uidEdit
=
new
WinEdit(
this
);
375
#region
Search Criteria
376
this
.mUITbx_uidEdit.SearchProperties[WinEdit.PropertyNames.Name]
=
"
密码 :
"
;
377
this
.mUITbx_uidEdit.WindowTitles.Add(
"
系统登录
"
);
378
#endregion
379
}
380
return
this
.mUITbx_uidEdit;
381
}
382
}
383
#endregion
384
385
#region
Fields
386
private
WinEdit mUITbx_uidEdit;
387
#endregion
388
}
389
390
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
391
public
class
UITbx_pwdWindow : WinWindow
392
{
393
394
public
UITbx_pwdWindow(UITestControl searchLimitContainer) :
395
base
(searchLimitContainer)
396
{
397
#region
Search Criteria
398
this
.SearchProperties[WinWindow.PropertyNames.ControlName]
=
"
Tbx_pwd
"
;
399
this
.WindowTitles.Add(
"
系统登录
"
);
400
#endregion
401
}
402
403
#region
Properties
404
public
WinEdit UITbx_pwdEdit
405
{
406
get
407
{
408
if
((
this
.mUITbx_pwdEdit
==
null
))
409
{
410
this
.mUITbx_pwdEdit
=
new
WinEdit(
this
);
411
#region
Search Criteria
412
this
.mUITbx_pwdEdit.WindowTitles.Add(
"
系统登录
"
);
413
#endregion
414
}
415
return
this
.mUITbx_pwdEdit;
416
}
417
}
418
#endregion
419
420
#region
Fields
421
private
WinEdit mUITbx_pwdEdit;
422
#endregion
423
}
424
425
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
426
public
class
UI登录Window : WinWindow
427
{
428
429
public
UI登录Window(UITestControl searchLimitContainer) :
430
base
(searchLimitContainer)
431
{
432
#region
Search Criteria
433
this
.SearchProperties[WinWindow.PropertyNames.ControlName]
=
"
Btn_Login
"
;
434
this
.WindowTitles.Add(
"
系统登录
"
);
435
#endregion
436
}
437
438
#region
Properties
439
public
WinButton UI登录Button
440
{
441
get
442
{
443
if
((
this
.mUI登录Button
==
null
))
444
{
445
this
.mUI登录Button
=
new
WinButton(
this
);
446
#region
Search Criteria
447
this
.mUI登录Button.SearchProperties[WinButton.PropertyNames.Name]
=
"
登录
"
;
448
this
.mUI登录Button.WindowTitles.Add(
"
系统登录
"
);
449
#endregion
450
}
451
return
this
.mUI登录Button;
452
}
453
}
454
#endregion
455
456
#region
Fields
457
private
WinButton mUI登录Button;
458
#endregion
459
}
460
461
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
462
public
class
UI系统登录TitleBar : WinTitleBar
463
{
464
465
public
UI系统登录TitleBar(UITestControl searchLimitContainer) :
466
base
(searchLimitContainer)
467
{
468
#region
Search Criteria
469
this
.WindowTitles.Add(
"
系统登录
"
);
470
#endregion
471
}
472
473
#region
Properties
474
public
WinButton UICloseButton
475
{
476
get
477
{
478
if
((
this
.mUICloseButton
==
null
))
479
{
480
this
.mUICloseButton
=
new
WinButton(
this
);
481
#region
Search Criteria
482
this
.mUICloseButton.SearchProperties[WinButton.PropertyNames.Name]
=
"
Close
"
;
483
this
.mUICloseButton.WindowTitles.Add(
"
系统登录
"
);
484
#endregion
485
}
486
return
this
.mUICloseButton;
487
}
488
}
489
#endregion
490
491
#region
Fields
492
private
WinButton mUICloseButton;
493
#endregion
494
}
495
496
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
497
public
class
UI提示Window : WinWindow
498
{
499
500
public
UI提示Window()
501
{
502
#region
Search Criteria
503
this
.SearchProperties[WinWindow.PropertyNames.Name]
=
"
提示
"
;
504
this
.SearchProperties[WinWindow.PropertyNames.ClassName]
=
"
#32770
"
;
505
this
.WindowTitles.Add(
"
提示
"
);
506
#endregion
507
}
508
509
#region
Properties
510
public
UI用户名或密码错误Window UI用户名或密码错误Window
511
{
512
get
513
{
514
if
((
this
.mUI用户名或密码错误Window
==
null
))
515
{
516
this
.mUI用户名或密码错误Window
=
new
UI用户名或密码错误Window(
this
);
517
}
518
return
this
.mUI用户名或密码错误Window;
519
}
520
}
521
522
public
UIOKWindow UIOKWindow
523
{
524
get
525
{
526
if
((
this
.mUIOKWindow
==
null
))
527
{
528
this
.mUIOKWindow
=
new
UIOKWindow(
this
);
529
}
530
return
this
.mUIOKWindow;
531
}
532
}
533
#endregion
534
535
#region
Fields
536
private
UI用户名或密码错误Window mUI用户名或密码错误Window;
537
538
private
UIOKWindow mUIOKWindow;
539
#endregion
540
}
541
542
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
543
public
class
UI用户名或密码错误Window : WinWindow
544
{
545
546
public
UI用户名或密码错误Window(UITestControl searchLimitContainer) :
547
base
(searchLimitContainer)
548
{
549
#region
Search Criteria
550
this
.SearchProperties[WinWindow.PropertyNames.ControlId]
=
"
65535
"
;
551
this
.WindowTitles.Add(
"
提示
"
);
552
#endregion
553
}
554
555
#region
Properties
556
public
WinText UI用户名或密码错误Text
557
{
558
get
559
{
560
if
((
this
.mUI用户名或密码错误Text
==
null
))
561
{
562
this
.mUI用户名或密码错误Text
=
new
WinText(
this
);
563
#region
Search Criteria
564
this
.mUI用户名或密码错误Text.SearchProperties[WinText.PropertyNames.Name]
=
"
用户名或密码错误!
"
;
565
this
.mUI用户名或密码错误Text.WindowTitles.Add(
"
提示
"
);
566
#endregion
567
}
568
return
this
.mUI用户名或密码错误Text;
569
}
570
}
571
572
public
WinText UI登陆成功Text
573
{
574
get
575
{
576
if
((
this
.mUI登陆成功Text
==
null
))
577
{
578
this
.mUI登陆成功Text
=
new
WinText(
this
);
579
#region
Search Criteria
580
this
.mUI登陆成功Text.SearchProperties[WinText.PropertyNames.Name]
=
"
登陆成功!
"
;
581
this
.mUI登陆成功Text.WindowTitles.Add(
"
提示
"
);
582
#endregion
583
}
584
return
this
.mUI登陆成功Text;
585
}
586
}
587
#endregion
588
589
#region
Fields
590
private
WinText mUI用户名或密码错误Text;
591
592
private
WinText mUI登陆成功Text;
593
#endregion
594
}
595
596
[GeneratedCode(
"
Coded UITest Builder
"
,
"
10.0.30319.1
"
)]
597
public
class
UIOKWindow : WinWindow
598
{
599
600
public
UIOKWindow(UITestControl searchLimitContainer) :
601
base
(searchLimitContainer)
602
{
603
#region
Search Criteria
604
this
.SearchProperties[WinWindow.PropertyNames.ControlId]
=
"
2
"
;
605
this
.WindowTitles.Add(
"
提示
"
);
606
#endregion
607
}
608
609
#region
Properties
610
public
WinButton UIOKButton
611
{
612
get
613
{
614
if
((
this
.mUIOKButton
==
null
))
615
{
616
this
.mUIOKButton
=
new
WinButton(
this
);
617
#region
Search Criteria
618
this
.mUIOKButton.SearchProperties[WinButton.PropertyNames.Name]
=
"
OK
"
;
619
this
.mUIOKButton.WindowTitles.Add(
"
提示
"
);
620
#endregion
621
}
622
return
this
.mUIOKButton;
623
}
624
}
625
#endregion
626
627
#region
Fields
628
private
WinButton mUIOKButton;
629
#endregion
630
}
631
}
632
UIMap1.Designer.cs这个文件结构如下
图6:UIMap1.Designer.cs
我们可以用UIMap1.uitest上的内容和UIMap1.Designer.cs上的内容做个对比,可以明显的发现他们之间有一定的对应性,那么疑问就产生了,我们在录制的时候,究竟先生成UIMap1.uitest还是UIMap1.Designer.cs?在对界面操作的代码中,他们哪个起作用?
为了说明这个,就得提到编码的UI测试操作步骤的录制原理,这里会按步骤说明:
(1) 首先我们打开了录制生成器
(2) 使用录制生成器录制操作,对于每一个操作动作,录制生成器会根据你所进行的操作,解析被操作的对象(控件),并分析操作动作,并将对象(控件)的关键标识属性和操作动作按录制顺序存放在内存中
(3) 停止录制
(4) 点击“生成代码”按钮,录制生成器会读取之前放在内存中的对象(控件)的关键标识属性和操作动作按XML的形式存放在UIMap1.uitest里
(5) 之后代码生成器通过解析UIMap1.uitest,再生成UIMap1.Designer.cs
然后进行回放的时候,真正在起作用其实的是UIMap1.Designer.cs,UIMap1.uitest的作用仅仅是用于生成UIMap1.Designer.cs
我想介绍到这里很多曾经使用过VS2010编码UI测试的朋友应该明白了,为什么自己在UIMap1.Designer.cs添加或者删除的代码,在打开录制生成器之后,重新点击“生成代码”,之前的修改就消失了,原因就是因为UIMap1.Designer.cs里面的代码是根据UIMap1.uitest生成的
因此,如果要想编写自定义代码,可以通过两种途径
(1)通过修改UIMap1.uitest来控制UIMap1.Designer.cs代码的生成
(2)将代码写到非UIMap1.Designer.cs文件的其他地方
在本章的第二部分,将介绍如何通过修改UIMap1.uitest来控制UIMap1.Designer.cs代码的生成,预计可能在本周六或者周日发布,敬请关注~
PS:如何调用UIMap1.Designer.cs中的方法,这个时候可以新建一个CodedUItest.cs,取消录制,写一个这样的调用即可
[TestMethod]
public void CodedUITestMethod1()
{
UIMap1Classes.UIMap1 uimap1 = new UIMap1Classes.UIMap1();
uimap1.InputErrorUidPwd();
uimap1.AssertErrorWinow();
uimap1.InputRightUidPwd();
uimap1.AssertRightWinow();
uimap1.CloseWindow();
}
附:发布计划
编码的UI测试系列之一:入门篇 一个简单的示例(Released)
编码的UI测试系列之二:入门篇 操作动作的录制原理(上)(Released)
编码的UI测试系列之二:入门篇 操作动作的录制原理(下)(Released)
编码的UI测试系列之三:入门篇 操作对象的识别原理 (Released)
编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(上)(Released)
编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(下)(Released)
编码的UI测试系列之五:进阶篇 常用测试要点和函数(1)
编码的UI测试系列之六:进阶篇 常用测试要点和函数(2)
编码的UI测试系列之七:进阶篇 UI测试之间的互相引用和测试组织
编码的UI测试系列之八:高级篇 远程调用其他机器进行测试
编码的UI测试系列之九:高级篇 使用MS测试管理器组织测试