在Recorder提供的功能不能够满足的情况下,可以使用自定义代码。 这里有一些例子,可以方便演示自定义代码Action。
• 自定义验证
• 访问测试用例相关的数据和参数
• 扩展报告
在项目视图窗口中,仔细看一个录制模块文件,你会看到有两个相关的代码文件。
图:录制模块‘AddNewEntry’有两个代码文件
注:独立的Recorder内不提供自定义代码Action。
在Ranorex Studio每个录制模块都对应两种类型的源代码文件:
• 自动生成的主录制模块的源代码文件
<RecordingName>.<CodeFileExtension>
• 用户自定义代码的文件<RecordingName>.USERCODE.<CodeFileExtension>
您可以通过右击Action,从右键菜单中选择’View Code’跳转到生成的代码。
图:跳转到生成的代码记录Action
每次您更改并保存录制模块,主代码文件’AddNewEntry.cs“就会重新生成一次。 修改代码一定要在UserCode.cs文件中进行。
创建自定义代码Action
您可以,通过转换现有的action创建用户自定义代码Action,或通过工具栏按钮’Add New Action’增加一个新的“用户自定义代码”Action条目。
图:将现有的Action条目转换成代码Action
图:为用户自定义代码条目创建方法名称
图:使用右键菜单项‘View Code’跳转到对应代码
创建一个新的自定义代码Action后,录制模块类中就会添加一个新的方法。 如果你将现有的Action条目转换,那么生成的新方法中也会包含该操作的代码。
1. namespace MyFirstTestProject
2. {
3. public partial class AddEntry
4. {
5. /// <summary>
6. /// This method gets called right after the recording has been started.
7. /// It can be used to execute recording specific initialization code.
8. /// </summary>
9. private void Init()
10. {
11. // Your recording specific initialization code goes here.
12. }
13.
14. public void ClickOnPasswordField()
15. {
16. Report.Log(ReportLevel.Info, “Mouse”, “Mouse Left Click item ‘FormAdd_Entry.TabPageList.InputFields.TextPassword’ at 175;9.”, repo.FormAdd_Entry.TabPageList.InputFields.TextPasswordInfo);
17. repo.FormAdd_Entry.TabPageList.InputFields.TextPassword.Click(“175;9”);
18. }
19.
20. }
21. }
自定义代码Action和参数
自Ranorex3.3开始,就可以在自定义代码Action使用参数。 您可以通过(字符串)值向方法传递,这样就能在测试环境中获得更大的灵活性。
要在一个新的自定义代码Action中使用参数,只需按一下旁边的单元格中键入一个值作为方法的参数(如’WordPressDemo’)。
图:自定义代码Action参数
为了提高灵活性,您可以使用变量,而不是硬编码值。
图:创建一个新的变量作为参数
当然,一个Action也能够使用多个参数。 如果有没有更多的可用列来输入参数(在GUI上最多三个),你可以使用浏览按钮来访问Ranorex的参数编辑器。
图:浏览按钮访问Ranorex参数编辑器
你会发现现有的参数都在这个Ranorex编辑器中。 在这里,你也可以重命名现有的参数和添加额外的参数。
图:Ranorex参数编辑器:管理用户代码参数
声明参数值和变量后,你可以切换到自定义代码界面,并使用传递过来的参数..
1. public void AddEntryWithParams(string aTitle, string aUsername, string aPassword, string aURL)
2. {
3. MyFirstTestProjectRepository MyRepo = MyFirstTestProjectRepository.Instance;
4.
5. // Set text fields
6. MyRepo.AddEntry.TabSheetAddEntry.Title.TextValue = aTitle;
7. MyRepo.AddEntry.TabSheetAddEntry.UserName.TextValue = aUsername;
8. MyRepo.AddEntry.TabSheetAddEntry.Password.TextValue = aPassword;
9. MyRepo.AddEntry.TabSheetAddEntry.Repeat.TextValue = aPassword;
10. MyRepo.AddEntry.TabSheetAddEntry.URL.TextValue = aURL;
11. }
此外,可以直接在代码界面编写要用到的方法,然后在RanorexRecorder中调用。 在这里,你也可以使用方法重载。
图:选择一个重载的方法
图:Ranorex参数编辑器支持管理重载方法的参数和变量
代码中的条件语句
编写用户代码的另一个原因是从例如文本框这样的UI元素中读取文本值,然后在后续的自动化脚本中复用。
注:在录制模块中尽量只创建小巧并易于维护的自定义代码Action。 如果想要编写的方法也可用于其他测试用例,请创建一个代码模块(见课程7:代码模块 )来代替。
在之前的第3课:数据驱动的测试中创建了‘DeleteEntry’录制模块,有三个简单的Action来实现删除所选条目(选择条目,打开右键菜单,并选择右键菜单项)。 正如你可以看到,如果只是选中了一个条目,是可以顺利执行下去。 要做到这一点,就可以使用代码的条件语句。
第一步,打开“DeleteEntry”录制模块,然后选择最后两个条目,因为如果条目被选中,只有他们应该执行。 在右键菜单中点击’Merge Items to User Code Item’菜单项。
图:右键菜单项‘Merge Items to User Code Item’
这样做了以后,这两个Action都合并到一个自定义代码Action中。 给这个方法取一个有意义的名称(例如“DeleteItemIfFocused)。 单击右键菜单项’View User Code’,切换到代码视图中。 最后调整代码。
1. public void DeleteItemIfFocused()
2. {
3. if (repo.MainForm.Entry.HasFocus) {
4.
5. Report.Log(ReportLevel.Info, “Mouse”, “Mouse Right Click item ‘MainForm.Entry’ at 127;10.”, repo.MainForm.EntryInfo);
6. repo.MainForm.Entry.Click(System.Windows.Forms.MouseButtons.Right, “127;10”);
7.
8. Report.Log(ReportLevel.Info, “Mouse”, “Mouse Left Click item ‘KeePass.DeleteEntry’ at 168;14.”, repo.KeePass.DeleteEntryInfo);
9. repo.KeePass.DeleteEntry.Click(“168;14”);
10. }
11.
12. }