默认地,每一个Ranorex Studio项目包含一个对象库文件,这个文件自动用在每一个新创建的录制中。你可以在一个单独的库文件中管理一个测试套件项目中所有的UI元素,但是在一个自动化测试项目中多个对象库的存在还是有一些原因的:
.测试不同的用户界面
.通用的模块使用通用对象库
.为复杂的识别使用高级的RanoreXPath库
.多个测试人员工作在同一个自动化测试项目中
测试不同的用户界面
如果你的测试套件包含,比如一个web应用的测试用例和一个客户端应用的用户界面的测试,两个库就有用了。一个是用来管理web应用的UI元素,同时另一个专门存储客户端应用的UI元素。虽然你可以在一个库中用简单文件夹分组的拆分,但是团队工作中,拆分尤其有意义。
通用模块使用通用对象库
库可以(而且应该)以录制模块和代码模块那样的方式被模块化和重用。例如,当你考虑一个富客户端应用的主要菜单、功能区或工具条时,你将会创建小的可重用的录制,点击主菜单的’File’ |’Open’ |’Handle the Open File Dialog’ |等。所有这些可重用的模块与主菜单,主工具条或其他类似的控件,常见的控件一起工作,它们应该存放在一个专门为界面上通用的对象创建的对象库中。
高级的RanoreXPath表达式
另一个建立分对象库的原因可以是专门用来存储那些高级的RanoreXPath表达式,这些RanoreXPath表达式用于那些手工创建的新动作,而不是用于通过录制创建的动作。
多个测试员在同一个项目中
只要你独自工作在一个自动测试项目中,使用单独的对象库不成问题。当在一个团队中工作的时候,如果团队中的每个人都通过点击“Record”按钮来创建自动化测试模块的话,建议牢记谁负责主库,谁可以重命名对象和重建库。拆分对象库的主要原因是为了避免破坏其他成员使用的库条目的意外。
添加一个新库
Ranorex Studio可以处理多个对象库。当为KeePass应用执行自动测试时,拆分的库文件有利于测试复杂的配置对话框,它可以保持你的对象库结构简单,并且为多个用户在不同的库文件上工作提供了可能性。
点击Ranorex Studio工具栏的“Add Repository”按钮,向你的项目添加一个新库。
图:创建一个新的对象库文件
图:KeePass中新对象库表示复杂的选项对话框
注意:关键是理解对象库必须工作在Ranorex中,这个基本原则不依赖于所使用的技术。
注意:不同技术识别元素的方式有一些不同,因此RanoreXPath对于不同的技术有点儿不同。一旦你的库用健壮的方式识别到元素,不管你的测试用例用的是哪种技术都没有关系。当然,在Ranorex studio中,不同的技术可以在同一个自动化测试项目中使用或者结合起来使用。
在代码模块使用多个对象库
现在你的测试项目包括两个对象库文件。一个录制模块仅可使用一个对象库,而代码模块可以使用多个对象库。
C#
[TestModule(“C5B0C011-274A-4E54-83DB-0CE28DB95509″, ModuleType.UserCode, 1)]
public class OptionsCodeModule : ITestModule
{
// Repository object to access UI elements of KeePass Application
MyFirstTestProjectRepository repo = MyFirstTestProjectRepository.Instance;
// Repository object to access UI elements of KeePass Options Dialog
KeePassOptionsRepository OptionsRepo = KeePassOptionsRepository.Instance;
/// <summary>
/// Constructs a new instance.
/// </summary>
public OptionsCodeModule()
{
// Do not delete – a parameterless constructor is required!
}
/// <summary>
/// Performs the playback of actions in this module.
/// </summary>
/// <remarks>You should not call this method directly, instead pass the module
/// instance to the <see cref=”TestModuleRunner.Run(ITestModule)”> method
/// that will in turn invoke this method.</see></remarks>
void ITestModule.Run()
{
Mouse.DefaultMoveTime = 300;
Keyboard.DefaultKeyPressTime = 100;
Delay.SpeedFactor = 1.0;
// Click the Save-Button in KeePass MainForm
repo.KeePass.ButtonSave.Click();
// Check the option to AutoClear the Clipboard
OptionsRepo.FormOptions.TabSecurity.CheckBoxClipboard_auto_clear.Checked = true;
}
}
VB.NET
<testmodule(“baa60b6c-5dd1-4eb5-bc39-fdfd65775742″, moduletype.usercode,=”” 1)=””> _
Public Class UserCodeModule1
Implements ITestModule
”’ Repository object to access UI elements of KeePass Application
Private repo As MyFirstTestProjectRepository = MyFirstTestProjectRepository.Instance
” Repository object to access UI elements of KeePass Options Dialog
Private OptionsRepo AS KeePassOptionsRepository = KeePassOptionsRepository.Instance
”’ <summary>
”’ Constructs a new instance.
”’ </summary>
Public Sub New()
‘ Do not delete – a parameterless constructor is required!
End Sub
TestRepository repo = TestRepository.Instance;
”’ <summary>
”’ Performs the playback of actions in this module.
”’ </summary>
”’ <remarks>You should not call this method directly, instead pass the module
”’ instance to the <see cref=”TestModuleRunner.Run(Of ITestModule)”> method
”’ that will in turn invoke this method.</see></remarks>
Sub Run() Implements ITestModule.Run
Mouse.DefaultMoveTime = 300
Keyboard.DefaultKeyPressTime = 100
Delay.SpeedFactor = 1.0
”’ Click the Save-Button in KeePass MainForm
repo.KeePass.ButtonSave.Click
”’ Check the option to AutoClear the Clipboard
OptionsRepo.FormOptions.TabSecurity.CheckBoxClipboard_auto_clear.Checked = true
End Sub
End Class
</testmodule(“baa60b6c-5dd1-4eb5-bc39-fdfd65775742”,>