VS2010测试功能之旅——编码的UI测试系列之二:操作动作的录制原理(下)
来源:互联网 发布:pci串行端口驱动 编辑:程序博客网 时间:2024/05/16 15:15
VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(下)
回顾
在本章上部分介绍了操作动作的录制原理,描述了操作动作是如何录制,UIMap.uitest和UIMap.Designer.cs的代码如何生成,以及他们的结构。在这个部分,将着重说明如何通过修改UIMap1.uitest文件的操作动作部分的代码来控制UIMap1.Designer.cs操作动作部分代码的生成,实现第一种方式的自定义编码。
内容简介
在上个部分,已经说明了UIMap.uitest文件的结构如下:
其中InitializeActions,ExecuteActions,CleanupActions,OnErrorAction都是对于操作动作的描述:
InitializeActions:指初始化需要执行的操作动作
ExecuteActions:指测试过程中的操作动作(通过录制所生成的操作都默认放在ExecuteActions)
CleanupActions:指测试完毕需要清理资源的操作动作
OnErrorAction:指代异常处理的操作动作
他们都对UIMap1.Designer.cs操作动作部分代码的生成和参数的生成有直接的影响。
严格的说,放在InitializeActions下的操作动作和放在ExecuteActions,CleanupActions,OnErrorAction的动作没有任何本质上的区别,仅仅只是从一个代码可读性上的考虑。
编码的UI测试所支持的Actions
如果我们仔细观察过ExecuteActions录制所生成的代码,可以发现有一个共同特点,ExecuteActions的子节点都是以<Action>结尾形式的标签,那么编码的UI测试一共支持多少种的Action呢?这里我整理了一个列表,简单的介绍了测试所支持的Action和功能简介。
类
说明
AggregatedAction
为可以完成几种任务中任何一种的所有操作提供基类。
AssertAction
表示要包含在测试中其他两个操作之间的断言。
BrowserAction
表示可以完成几种浏览器任务中的任何一种的测试操作。
DelayAction
指定执行用户界面 (UI) 测试中的后续操作后的时间延迟。
DragAction
表示鼠标拖动操作。
DragDropAction
表示鼠标拖放操作。
ErrorAction
表示一个操作,测试记录器使用该操作报告它无法记录某一操作。
InputAction
表示所有基于文本的操作的基类。
KeyboardAction
表示单个的键盘用户操作。
LaunchApplicationAction
表示启动一个应用程序的 UI 测试操作。
MarkerAction
提供一种在操作序列中插入标记而不会在播放过程中导致任何操作的方法。
MouseAction
表示关于鼠标操作的信息。
NavigateToUrlAction
表示移动到某一 URL 的操作。
NoOperationAction
表示不执行任何操作的用户界面 (UI) 测试操作。
RemoveKeysAction
提供有关聚合测试操作声明,从测试结果中移除此操作及之前的所有匹配键操作。
SendKeysAction
表示发送文本或键数组的测试操作。
SetBaseAction
为设置值或设置状态的测试操作提供基类。
SetStateAction
表示一个设置关联元素状态的测试操作。
SetValueAction
表示用于设置值的测试操作。
SharedStepsReferenceAction
为当前测试提供对一组共享步骤的引用。
StringAssertAction
表示一个字符串断言。
TestStepMarkerAction
表示测试操作序列中的一个标记,将记录该标记,但播放框架不使用该标记。
UITestAction
为用于用户界面 (UI) 测试的测试操作提供基类。
ValidationAction
表示一个验证属性值的操作。
VerifyConfigurationAction
表示一个验证配置的操作。
WarningAction
表示一个操作,UI 记录器使用该操作报告它无法正确录制某一操作。
WebDialogAction
表示一个报告 Web 对话框的操作。
在这里将抽取几个主要的ACTION进行介绍。
通过编写UIMap.uitest文件控制UIMap.designer.cs代码的生成。
1.首先我们还是通过添加新项的方式建立一个新的Coded UI Test Map(编码的UI测试映射)。
2.之后,直接进入UIMap1.uitest文件,可以发现代码如下:
<InitializeActions> <!— 打开示例文件,文件路径按实际情况填写--> <LaunchApplicationAction> <FileName>D:\RightDemo.exe</FileName> </LaunchApplicationAction> <!--为之前所有的操作步骤生成|一个方法,名称为LaunchApplication()--> <TestStepMarkerAction MarkerInformation="LaunchApplication"> <ParameterName /> <StepId>-1</StepId> <Direction>Start</Direction> <Outcome/> <Disabled>false</Disabled> </TestStepMarkerAction></InitializeActions>
4. 编码执行代码ExecuteActions
添加了初始化的InitializeActions,之后,我们需要给他添加ExecuteActions,用于执行界面上的操作,在编写操作之前,假设我们需要输入正确的用户名(Admin)和正确的密码(123456),然后点击登陆,检测是否弹出“登陆成功”的对话框。那么进行操作前,首先需要的是先捕获用户名文本框,密码文本框,登录按钮,弹出框文本这4个对象,之后再对这4个对象进行操作。
添加对象的方法如下:
首先,打开录制生成器,点上面的准星:
之后,一直按住鼠标左键不放,将鼠标拖到用户名文本框,再松开:
然后,我们可以看到对象库已经自动打开,其中UITbx_uidEdit就是被我们捕获的用户名文本框:
这个时候我们点击 ,之后对象就被添加到对象库了,接下来按照同样的方法,依次将密码文本框,登录按钮,弹出框文本分别加入对象库,如图:
之后点击“生成代码”,然后关闭录制生成器,可以看到在UIMap.uitest的<Maps>节点已经生成了相关的对象,而在UIMap.designer.cs的对象映射部分也添加了相应的代码(具体对象识别原理会在第三章提到,这里只先使用对象进行操作)。
对象添加进入对象库了,现在只需要编写操作了。
我们需要输入正确的用户名(Admin)和正确的密码(123456),然后点击登陆,检测是否弹出“登陆成功”的对话框,并生成两个方法,InputRightUidPwd()用于输入用户名和密码,AssertRightWindow()用于验证是否弹出相应的弹出框文本,那么需要依次用到如下Action:
a.SetValueAction 设置用户名文本框的值
b.SetValueAction设置密码文本框的值
c.MouseAction 鼠标点击登陆按钮
d.TestStepMarkerAction 生成方法InputRightUidPwd()
e.AssertAction 为判断是否弹出生成断言
f. TestStepMarkerAction 生成方法AssertRightWindow()
按照这个思路,我们开始编写如下代码:
(这里可以看到某些操作都带有UIObjectName属性,该属性表示被操作的对象是谁,也就是刚才捕获到对象库里面的对象名称)
<ExecuteActions> <!--UIObjectName表示被操作的对象是谁--> <SetValueAction UIObjectName="UIMap1.UI 系统登录Window.UITbx_uidWindow.UITbx_uidEdit"> <Value Encoded="false">Admin</Value> </SetValueAction> <SetValueAction UIObjectName="UIMap1.UI 系统登录Window.UITbx_pwdWindow.UITbx_pwdEdit"> <Value Encoded="false">123456</Value> </SetValueAction> <MouseAction UIObjectName="UIMap1.UI 系统登录Window.UI登录Window.UI登录Button"> <Location X="1" Y="1" /> <WheelDirection>0</WheelDirection> <ActionType>Click</ActionType> <MouseButton>Left</MouseButton> </MouseAction> <TestStepMarkerAction MarkerInformation="InputRightUidPwd"> <StepId>-1</StepId> <Direction>Start</Direction> <Outcome /> <Disabled>false</Disabled> </TestStepMarkerAction> <AssertAction UIObjectName="UIMap.UI 提示Window.UI登陆成功Window.UI登陆成功Text"> <PropertyName>Exists</PropertyName> <ExpectedValue>True</ExpectedValue> <Type>Boolean</Type> <PropertyCondition>AreEqual</PropertyCondition> </AssertAction> <TestStepMarkerAction MarkerInformation="AssertRightWindow"> <ParameterName /> <StepId>-1</StepId> <Direction>Start</Direction> <Outcome /> <Disabled>false</Disabled> </TestStepMarkerAction></ExecuteActions>
- VS2010测试功能之旅——编码的UI测试系列之二:操作动作的录制原理(下)
- VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(下)
- VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(上)
- VS2010测试功能之旅:编码的UI测试(2)-操作动作的录制原理(上)
- VS2010测试功能之旅:编码的UI测试(3)-操作对象的识别原理
- VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(下)
- VS2010测试功能之旅:编码的UI测试(1)
- VS2010测试功能之旅:编码的UI测试(1)
- VS2010测试功能之旅:编码的UI测试(1)
- VS2010测试功能之旅:编码的UI测试(6)- 提高UI测试稳定性的8个方法(下)
- VS2010测试功能之编码的UI测试之组织测试脚本的结构
- VS2010测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(上)
- VS2010测试功能之编码的UI测试之自动生成脚本的结构
- VS2010测试功能之旅:编码的UI测试(6)- 提高UI测试稳定性的8个方法(上)
- VS2010测试功能之旅:编码的UI测试(5)-常用测试要点和函数:使用数据驱动的测试
- UI自动化测试系列之TestNG----失败用例自动重试功能二
- 如何用VS2010创建一个简单的UI编码测试
- UI自动化测试系列之TestNG--------TestNG的parallel属性
- Install Oracle Java JDK 7 in Ubuntu 12.04 (Precise Pangolin)
- android的无标题dialog以及dialog样式的窗体
- 概念股下跌市场存疑虑 平板市场欲燃价格战
- 虚函数&动态联编
- Spring AOP 之 HelloWorld(简单例子)
- VS2010测试功能之旅——编码的UI测试系列之二:操作动作的录制原理(下)
- 投影矩阵的推导
- Trusted RFC creation (step by step procedure)
- 如何成为一名架构师
- 位图
- Spring Security3实战开发基础(一)
- putty使用密钥登陆OpenSSH
- android callRemoteService 调用其他进程的service
- VisualStudioVS2010统计代码行数(免安装插件)