自定义代码Action

在Recorder提供的功能不能够满足的情况下,可以使用自定义代码。 这里有一些例子,可以方便演示自定义代码Action。

  • 自定义验证
  • 访问测试用例相关的数据和参数
  • 扩展报告

在项目视图窗口中,仔细看一个录制模块文件,你会看到有两个相关的代码文件。

01-recording-code-files-10

图:录制模块‘AddNewEntry’有两个代码文件

注:独立的Recorder内不提供自定义代码Action。

在Ranorex Studio每个录制模块都对应两种类型的源代码文件:

  • 自动生成的主录制模块的源代码文件
    <RecordingName>.<CodeFileExtension>
  • 用户自定义代码的文件<RecordingName>.USERCODE.<CodeFileExtension>

您可以通过右击Action,从右键菜单中选择’View Code’跳转到生成的代码。

 

02-view-code-of-recordingaction-ca

图:跳转到生成的代码记录Action

每次您更改并保存录制模块,主代码文件’AddNewEntry.cs“就会重新生成一次。 修改代码一定要在UserCode.cs文件中进行。

创建自定义代码Action

您可以,通过转换现有的action创建用户自定义代码Action,或通过工具栏按钮’Add New Action’增加一个新的“用户自定义代码”Action条目。

03-conver-to-usercode-9e

图:将现有的Action条目转换成代码Action 

 

04-change-action-name-89

图:为用户自定义代码条目创建方法名称 

 

02-view-code-of-usercode-action-6a

图:使用右键菜单项‘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.         public void ClickOnPasswordField()
  14.         {
  15.             Report.Log(ReportLevel.Info, “Mouse”, “Mouse Left Click item ‘FormAdd_Entry.TabPageList.InputFields.TextPassword’ at 175;9.”, repo.FormAdd_Entry.TabPageList.InputFields.TextPasswordInfo);
  16.             repo.FormAdd_Entry.TabPageList.InputFields.TextPassword.Click(“175;9”);
  17.         }
  18.     }
  19. }

自定义代码Action和参数

自Ranorex3.3开始,就可以在自定义代码Action使用参数。 您可以通过(字符串)值向方法传递,这样就能在测试环境中获得更大的灵活性。

要在一个新的自定义代码Action中使用参数,只需按一下旁边的单元格中键入一个值作为方法的参数(如’WordPressDemo’)。

05-usercode-actions-with-parameter-ef

图:自定义代码Action参数

为了提高灵活性,您可以使用变量,而不是硬编码值。

 

06-make-argument-variable-5c

图:创建一个新的变量作为参数

当然,一个Action也能够使用多个参数。 如果有没有更多的可用列来输入参数(在GUI上最多三个),你可以使用浏览按钮来访问Ranorex的参数编辑器。

 

07-open-argument-editor-3c

图:浏览按钮访问Ranorex参数编辑器

你会发现现有的参数都在这个Ranorex编辑器中。 在这里,你也可以重命名现有的参数和添加额外的参数。

07-argument-editor-30

图:Ranorex参数编辑器:管理用户代码参数

声明参数值和变量后,你可以切换到自定义代码界面,并使用传递过来的参数..

  1.  public void AddEntryWithParams(string aTitle, string aUsername, string aPassword, string aURL)
  2. {
  3.  MyFirstTestProjectRepository MyRepo = MyFirstTestProjectRepository.Instance;
  4.  // Set text fields
  5.  MyRepo.AddEntry.TabSheetAddEntry.Title.TextValue = aTitle;
  6.  MyRepo.AddEntry.TabSheetAddEntry.UserName.TextValue = aUsername;
  7.  MyRepo.AddEntry.TabSheetAddEntry.Password.TextValue = aPassword;
  8.  MyRepo.AddEntry.TabSheetAddEntry.Repeat.TextValue = aPassword;
  9.  MyRepo.AddEntry.TabSheetAddEntry.URL.TextValue = aURL;
  10. }

 

此外,可以直接在代码界面编写要用到的方法,然后在RanorexRecorder中调用。 在这里,你也可以使用方法重载。

 

08-overloaded-method-0a

图:选择一个重载的方法 

 

09-argument-editor-varibale-binding-05

图:Ranorex参数编辑器支持管理重载方法的参数和变量

代码中的条件语句

编写用户代码的另一个原因是从例如文本框这样的UI元素中读取文本值,然后在后续的自动化脚本中复用。

注:在录制模块中尽量只创建小巧并易于维护的自定义代码Action。 如果想要编写的方法也可用于其他测试用例,请创建一个代码模块(见课程7:代码模块 )来代替。

在之前的第3课:数据驱动的测试中创建了‘DeleteEntry’录制模块,有三个简单的Action来实现删除所选条目(选择条目,打开右键菜单,并选择右键菜单项)。 正如你可以看到,如果只是选中了一个条目,是可以顺利执行下去。 要做到这一点,就可以使用代码的条件语句。

第一步,打开“DeleteEntry”录制模块,然后选择最后两个条目,因为如果条目被选中,只有他们应该执行。 在右键菜单中点击’Merge Items to User Code Item’菜单项。

10-merge-items-to-usercode-85

图:右键菜单项‘Merge Items to User Code Item’

这样做了以后,这两个Action都合并到一个自定义代码Action中。 给这个方法取一个有意义的名称(例如“DeleteItemIfFocused)。 单击右键菜单项’View User Code’,切换到代码视图中。 最后调整代码。

  1. public void DeleteItemIfFocused()
  2. {
  3.     if (repo.MainForm.Entry.HasFocus) {
  4.         Report.Log(ReportLevel.Info, “Mouse”, “Mouse Right Click item ‘MainForm.Entry’ at 127;10.”, repo.MainForm.EntryInfo);
  5.         repo.MainForm.Entry.Click(System.Windows.Forms.MouseButtons.Right, “127;10”);
  6.         Report.Log(ReportLevel.Info, “Mouse”, “Mouse Left Click item ‘KeePass.DeleteEntry’ at 168;14.”, repo.KeePass.DeleteEntryInfo);
  7.         repo.KeePass.DeleteEntry.Click(“168;14”);
  8.     }
  9. }

 

Leave a comment

请输入正确的验证码