其他编辑选项

在上一课中,你已经了解到Recorder通常是用来记录用户action的。录制完成后,可能需要编辑录制的数据,例如合并被分割的键盘录入或删除错误记录的Action。 您还可以添加新的Action,例如像添加一个验证步骤这样的,在录制过程中没考虑到的action。 在下面的章节中,您将了解:

  • 添加新Action
  • Recorder变量
  • 分割录制模块

添加新Action

在Action表中,有两种手动添加action的方式。 一种方法是指定Action本身(’添加新Action’),然后分配对应的对象库条目(在多数情况下)。 第二种方法是直接把对象库条目拖放到Action表内,然后生成action。

使用’Add New Action’按钮

要添加一个新的Action条目,打开’Add New Action’下拉菜单,如下图所示:

01-add-new-action-bc

图:添加一个新的Action条目到Action表中

选中其中一个条目,这时一个新添加的Action就会紧跟着出现在它后面。

 

02-new-added-mouse-action-dd

图:新的鼠标移动action被添加

根据Action条目类型的不同,您可以单独为每个Action配置。在这之前,你应该先为这一Action指定对象库条目 – 这可能会影响指定该action的可用选项。 如上图所示,你应该点击红色框住的小按钮,然后选择Action所涉及到的对象库条目。 在’Select Repository Item’对话框中列出的条目,与对象库内的是相同的。 您可以使用“搜索”来找元素。 在第6课:UI映射与Ranorex对象库 – 搜索元素,你可以阅读到更多有关如何使用对象库搜索,添加新UI元素的内容。 单击“确定”按钮确认您的选择。

 

03-select-repository-item-4f

图:选择一个要使用的Action对象库条目

另外,用户可以指定对象库条目,然后把对象库条目拖放到新创建的Action对应的’Repository Item’栏。

 

04-drag-drop-repoistory-item-to-action-6c

图:通过拖拽为Action分配对象

想要修改Action,就在窗格中点击使用下拉菜单,例如,你可以把click’Action改成’move’。

 

05-available-sub-actions-e0

图:鼠标Action可用的子Action

拖到对象库中来启动添加一个新的Action

除了上面介绍的方法,如下面图所示,你也可以把对象库条目拖放到Action表中新的一行。

 

06-add-action-by-drag-drop-c6

图:使用拖放为特定的对象库条目创建一个新的Action

拖放对象到action表中后,会提示指定Action类型。 更多可用的action信息,请参阅下文。

Action条目的类型

Mouse 在当前位置添加一个新的鼠标action条目
Mouse Wheel 添加一个新的鼠标滚轮Action条目
Touch Event 在当前位置添加一个新的触摸事件Action条目
Key Shortcut 添加一个新的快捷键action条目(例如’Ctrl + C’或’Ctrl + V’)
Key Sequence 添加一个新的键盘输入action条目(例如’Hello’)
Mobile Key Press 添加一个新的移动设备按键Action(例如{ BACK } {MENU}),
Validation 添加一个新的验证Action条目
Invoke Action 添加一个新的调用action条目(例如为list item调用 “select”操作)
Get Value 添加一个新的获取值Action条目(例如按钮的“文本值)
Set Value 增加了一个新的赋值action来设置元素的属性值(如文本元素的“文本值”)
Open Browser 打开一个浏览器并导航到指定的URL
Run Application 运行指定路径的应用程序
Run Mobile App 在移动设备上运行应用程序
Deploy Android/iOS App 在Andr​​oid或iOS设备上部署应用程序
关闭应用程序 关闭包含指定对象的应用程序或网站
Wait For Not Exists Ranorex执行等待操作,直到对象消失

注意:此Action可用于任何类型的UI元素

Report 添加一个新的报告Action条目

注:除了标准报告级别,你可以通过把’info’改为’Custom’级别,从而输出自定义报告级别

Separator 在Action表中选定的位置插入水平分割线
Delay 添加一个新的延时Action条目
User Code 这是用来添加一个新的自定义代码Action条目,例如实现用户特定的验证代码

注意:请记住,大多数类型的Action可以处理模块变量。

注:依据不同的Recorder UI Mode,会有不同的Action提供。 在设置对话框中的’Current Recording’选项卡中,你可以改变Recorder的用户界面模式。

注:对于每个action,都会有对应的属性面板,在这个面板中,可以改变一些属性参数的设置 (Next to the parameters as described in the next paragraphs there might be additional options for each action which can be accessed in the properties pane).。 您可以选中任何Action条目,击右键菜单项’property’来打开此面板。

Mouse

鼠标Action,可设置成’Up’, ‘Down’, ‘Click’, ‘Double-Click’ and ‘Move’ 等Action。 这个Action通常用于执行按钮点击,该操作要指定对象。

Mousewheel

鼠标滚轮Action可以被指定为“垂直”或“水平”方向。 你也可以指定一个滚轮值(wheel-delta),默认为120。

Touch Event

一个触摸事件Action可以被用来执行各种不同移动设备上的触摸,以及Windows8 metro桌面。

Key Shortcut

这个Action用于执行快捷键操作。 除了快捷键本身,它还可以指定本次操作触发的事件’Press’, ‘Up’ 和 ‘Down’.。 对于此action,可以不分配对象。

Key Sequence

这个Action可以模拟按键输入。 这个Action通常是在录入表单内容的情况下被录制(如在登录过程中输入username字段)。 对于这一Action,可以不分配对象。

Mobile Key Press

这个Action可以被用于在移动设备中按键,如{BACK}和{MENU}。 欲了解更多详细信息,请参考Android测试 –录制Android测试 。

Validation

验证Action通常用于验证特定对象的状态,文本或图像。 每个验证Action会在报告文件中生成特定内容,根据不同类型的验证和元素,可能产生不同的验证结果(成功,失败)。 指定对象后,您可以选择以下类型的验证:

Exists验证对象是否存在。

例如:   用户可以验证是否存在一个按钮,如果按钮确实存在就报告验证成功。

NotExists验证对象不存在。

示例:用户可以验证是否不存在指定的错误对话框,如果对话框不存在,则报告验证成功。

AttributeEqual验证属性(’Match Name’列)的值是否等于预期值(’Match Value’列)。 匹配的属性取决于所指定的对象,因此对象必须被指定。 例如,一个WinForms按钮可以验证 “text”,“valid”或”pressed”等状态,也可以验证’AccessibleName’,’AccessibleValue”等。 匹配的值可以是一个常量,自定义值或模块变量。

例如:用户可以验证一个按钮上是否具有文本“OK”, 如果这个按钮上的文本是“OK”,那么验证结果成功。

AttributeRegEx这个验证是针对一个特定的属性(’Match Name’列),使用正则表达式去匹配值“(自定义匹配值或模块变量)。 因为该属性本身(’Match Value’列),取决于所分配的对象库条目,因此建议在指定对象库条目时,它就是在使用一个匹配值(Because the attribute itself (column ‘Match Value’) depends on the assigned repository item, assignment of a repository item is recommended prior to choosing a match value.)。 如果您计划在这种类型的验证中使用一个变量,你就可以很容易地使用正则表达式验证该变量的值(If you plan to use a variable within this type of validation, you can easily implement your regular expression in the value of that variable)。

例如:想要验证KeePass程序的标题文本是否以’KeePass Password Safe’结束,因此’Match Name’中填写正则表达式’.+KeePass\ Password\ Safe$’。 如果在常量’KeePass Password Safe’前有任何字符(被定义为正则表达式.+),那么属性(’Match Name’列)就会被验证为成功。 正则表达式的详细信息,请参阅RanoreXPath – RanoreXPath与正则表达式 。

AttributeContains此验证检查对象库条目的特定属性(’Match Name’列)是否包含有特定的匹配值。 匹配值既可以是一个用户定义的常量,也可以是一个模块变量。 以上验证都需要分配对象库条目。

例如:用户可以验证KeePass程序的标题是否包含字符串’kdbx’,这个字符串是KeePass所使用的数据库的文件扩展名。 因此,Match Name将被设置为“title”,匹配值将被设置为’kdbx’。 如果标题真的包含字符串’kdbx,那么验证结果是成功的。

AttributeNotContains此验证可以被认为是 “AttributeContains” 的相反。 它检查属性(’Match Value’列)是否不包含匹配值。

例如:在KeePass中,可以验证特定单元格中的内容(URL)是否不包含字符串“http://”。因此’Match Name’设置成’Text’,‘Match Value’设置为“http://”。 如果URL不包含该值’http://’,那么此验证结果是成功,。

ContainsImage此验证是检查对象库条目是否包含一个指定的截图。 点击’Screenshot’列的一个按钮,在’Edit Image Validation’对话框中创建截图。 更多基于图像验证的信息,请参考本章后面部分“ 基于图像的自动化章节。

例:可以通过图像验证用户自定义图标列表(KeePass的条目)是否包含一个特定的图标。 这可以通过使用基于图像的验证。 因此,持有对象库条目图标的列表的截图将和指定图标的图片进行比对。 如果列表包含指定的图标,那么验证结果就会成功。

CompareImage此验证用于检查指定的对象库条目是否与截图相等。 点击“ScreenShot”列中的按钮,在’Edit Image Validation’对话框中,就可以轻松创建截图。 欲了解更多基于图像验证的信息,请参阅本章稍后的基于图像的自动化 。

例如:要验证KeePass程序的工具栏是否包含预期的图标,你就可以把对象库条目与其初始状态工具栏的截图进行比较。

Invoke Action

Invoke Action用于对象库条目调用Action。 例如一个WinForms按钮提供了’Ensuring Visibility’, ‘Focusing’ 和 ‘Pressing’功能。 更重要的是,这个Action可以用来在下拉列表和下拉框中选择条目。 虽然没有模拟鼠标移动和点击,但是条目本身还是会被选中。 这是一个比模拟鼠标操作更强大的Action。 即使由于在列表中有太多元素而导致该对象库条目不可见,但这个选择Action依然会生效。

调用用户自定义(动态)Action在你的被测系统中,除了使用默认的Action,你也可以调用用户自定义的action(请参阅调用用户定义的action )。

Get Value

正如这个Action的名称所示,这种方法可以用于获取对象库条目的值。 根据所分配的对象库条目不同,可用的属性也不同。 所获得的值可以分配给一个模块变量。 根据对象库条目可用适配器的不同,属性分为以下几个部分(见下图)。

07-get-value-5e

图:Get-Value action的子菜单

用正则表达式解析字符串:在GetValue action的’Capture Regex’列中,您可以指定一个正则表达式。

正则表达式的其他信息,请参考相应的MSDN网站: http://msdn.microsoft.com/en-us/library/az24scfc.aspx

根据这个正则表达式,就可以很容易地解析出指定的字符串字段。 匹配的字符串将被保存到所选的模块变量中。 到目前为止,还没写一行代码就实现了该功能。 如果正则表达式提供多个匹配,将会把第一个匹配的值存到模块变量中。

例如:如果你有一个字符串’Count: 42’,你想只返回数字(42),你可以用下面的正则表达式:’^Count: ([0-9]*)$’

第一个匹配正则表达式的组会被返回。 如果没有捕获组,那么返回整体值。 如果正则表达式中有多个组,那么使用’?<1>’来标记要返回的组。

例如:如果你有一个字符串’Rows: 23, Columns: 42’,你想使用正则表达式返回列数:那么就使用’^Rows: ([0-9]*), Columns: (?<1>[0-9]*)$’

User-defined methods and attributes此外,你也可以调用被测系统中定义的方法。 在下一节中(见调用用户定义的Action ),一个简单的应用程序可能有一个公共方法返回一个字符串,这个字符串指向了一个受保护的文本字段的值。 如果创建GetValueAction时,应用程序正在运行,那么就会看到一个“Dynamic”方法的子菜单。 公共属性也可以通过“Dynamic”子菜单存取。

注:为了存取动态的方法和属性,必须保证对象库条目是可用的。 可以在对象库中对该元素右击,并从右键菜单中选择’Highlight Element’,如果元素被高亮显示,说明该元素可用。

重用其他模块GUI元素的值:使用Get Value Action,可以把一个UI元素的属性值存储到一个模块变量。这样做,就可以在该模块内重复使用这个变量值。

 

08-report-text-value-3e

图:把一个按钮的文本值存储到一个变量

为了使模块变量中的值能被其他模块使用,需要把变量绑定到参数。 这样做后,其他模块就可以调用该参数的值。

 

09-passing-values-between-modules-5b

图:两个变量绑定到一个参数,把变量值从一个模块传递到另一个

Set Value

就像这个Action的名称所示,这种方法可用于设置对象库条目的属性值。 根据所分配的对象库条目的不同,可用的属性会有所不同。 根据对象库条目指定的适配器,该属性可以被划分成几个部分,如下所示。

10-set-value-5f

图:Set Value Action的子菜单

用户定义的属性,此外,它也可以设置用户定义的属性。 如果创建Set ValueAction时应用程序在运行,那么在子菜单的“Dynamic”中,包含所有可用的动态属性。

注:为了存取动态的方法和属性,必须保证对象库条目是可用的。 可以在对象库中对该元素右击,并从右键菜单中选择’Highlight Element’,如果元素被高亮显示,说明该元素可用。

Open Browser

这个Action用来打开浏览器。  打开网站需要输入“URL”参数。 通过browser参数选择浏览器(如:’IE’, ‘Chrome’, ‘Safari’ or ‘Firefox’)。

注意:您可以在’Browser’列使用一个“模块变量’,用于跨浏览器测试。 对于更详细的描述以及示例,请参考Ranorex自动化跨浏览器测试 。

此外,还有一个参数’Maximized’。 当这个参数设置为“false”时,会以默认窗口大小打开浏览器,后续仍然可以最大化。 如果’Maximized’参数设置为true,则以最大化的窗口打开浏览器。

Run Application

这个Action可以被用来打开’File Name’列指定文件名的应用程序。 您也可以传递一些参数(’Arguments’列),并定义应用程序是否以最大化窗口的状态打开(’Maximized’列,看看Open Browser Action中的说明,以了解更多有关此参数的内容)。

Run Mobile App

使用这个Action时,你可以指定“Device”和“APP”。 欲了解更多信息,请参阅Android的测试 – 录制Android测试 。

Deploy Android App

使用这个Action时,你可以指定’Device’和’APK文件“。 指定的Andr​​oid应用程序会部署到对应的Andr​​oid设备上。

Close Application

这个Action可以用来关应用程序和浏览器。 如果“CloseMethod”被设置为“CloseWindow”,那Ranorex会尝试关闭应用程序。 如果’Grace Period’的参数设置大于0毫秒,那么应用程序关闭失败时,应用程序的进程会在’Grace Period’后被关闭。 如果CloseMethod设置为’KillProcess’,那么应用程序的进程马上被关闭,’Grace Period’设置的值被忽略。

Wait For Not Exists

您可以使用“Wait For Not Exists’Action来等待,直到分配的对象库条目已经不存在。 您也可以指定一个“超时”时间。

Report

Report Action通常用于提供测试报告的相关信息。

您可以选择以下Action:

Log这个Action在测试报告中增加了一行给定的文本值。

例如:人们可以报告变量的当前值或用户界面元素。

Screenshot这个Action将一个特定的对象库条目的截图和用户定义的文本输出到测试报告中。 如果没有分配对象库条目,那么会对整个桌面截图。

例如:人们可以报告截图,这样就能清楚当前状态下的系统情况。

快照:此Action将一个特定的对象库条目的快照文件和用户自定义的文本输出到测试报告。 快照文件可以直接通过报告文件打开。 请注意截取快照时,对象库条目必须要指定。

例如:如果自动化运行时发生了问题,为了分析这种问题,可以截取被测程序的快照文件。

此外为了规范这个类型的Action,你还可以输出“Message”,并指定报告’Report Level’。 欲了解更多关于’Report Level’的信息,请看第8课:报告 。

Separator

分隔符可以把录制的Action从视觉上分割成较小部分,按照逻辑关系分隔以获得更清晰的视野。 在’Header Text’中,您可以指定标题名称或描述以下Action实现的功能。

Delay

这个Action可以在自动化测试执行时,用来暂停指定的时间(’Duration’列)。

注:此延迟时间不会根据速度因子(speed factor)进行缩放,在’TurboMode“中仍然生效

User Code

自定义代码Action可以用来执行用户代码文件中自定义的方法。 自定义代码Action在自定义代码Action章节中有更详细的说明。

调用用户定义的action

有时,如果能访问被测程序内部自定义的功能,它会非常有用。 您可以使用 “InvokeAction’,它也可以带参数。 例如,一个用Visual Studio(C#)开发的简单WinForms程序’Invoke-Example’中,提供了一个按钮,将文本常量自动赋值给一个Protected文本字段。

 

11-invoke-example-initial-e2

图:调用公共方法的示例(在初始状态)

  1. public void MyInvokedAction(string MyMessage)
  2. {
  3.     edProtectedText.Text = MyMessage;
  4. }
  5. private void btSetValue_Click(object sender, EventArgs e)
  6. {
  7.     edProtectedText.Text = “This text was set from GUI”;
  8. }

 

只能通过按一下按钮来设置Protected文本。 然后,应用程序的文本字段会被设置为字符串常量。

12-invoke-example-after-click-fe

图:没有使用自定义’Invoke’方法,点击按钮后的例子

Ranorex提供的功能,可以直接访问出现在子菜单中那些声明为public的方法。 使用一个自定义的参数值就可以很容易地被调用公共方法MyInvokedAction。 当添加新的Action时,建议保持应用程序(’InvokeExample’)运行着,因为可供调用的Action会根据运行环境而改变。

 

13-select-method-to-invoke-a1

图:可供调用action的子菜单

即使参数,也可以在RanorexRecorder表中轻易地设置。

 

14-set-parameters-42

图:设置一个invoked action的参数

您也可以在最后一个参数列,通过 “Browse(…)”按钮使用属性编辑器,就可以列出所有可用的参数。

 

15-argument-editor-68

图:浏览可用参数

调用此方法,文本框的内容就被设置为指定的值。

 

16-invoke-example-after-invoking-09

图:Ranorex调用方法的例子

失败继续运行和禁用

表中列出的每个Action条目,都可以设置为禁用或 “失败继续运行”。 设置action条目为“失败继续运行”时,如果遇到错误,模块不会停在那个位置,而是继续执行。 您可以通过右键菜单或属性窗口设置这两个选项。 设置为“失败继续运行的条目在Action表中以斜体表示,而禁用的Action条目显示为灰色。

 

17-optional-and-disabled-actions-5b

图:禁用的Action是灰色的,而失败继续运行‘Action以斜体字体样式表示

注: 指定Action遇到错误时,会向报告记录一个警告。

分割录制脚本

一个录制模块中, Action越多,那么Action的条理越混乱。 正如第2课:Ranorex模块-测试action已经提到的,建议把可以重复使用的步骤归到一个新创建的录制模块内。 使用右键菜单项’Move to New Recording Module’来创建一个新的录制模块。

18-move-actions-to-new-recording-e9

图:从选定条目创建一个新的录制模块

正如第2课:Ranorex模块-测试Action和第4课:Ranorex测试套件所描述的,使用测试套件编辑器把多个录制模块组合到一个测试用例中 。

更换录制模块的对象库

默认情况下,每个新创建的录制模块都是引用主对象库文件。 要创建新对象库,或指定另一个对象库,只需从“对象库”工具栏打开下拉菜单,如下图所示。

19-change-repository-a1

图:切换引用的对象库

如果你想打开一个对象库,但它目前不属于您的Ranorex Studio项目,那么选择“从磁盘打开”。 如果你想为一个录制模块专门使用一个对象库,只需将它嵌入到录制文件中。 在这种情况下,所有的对象库条目内容都保存在录制模块文件中。 为录制模块创建一个新的对象库时,它会自动添加到当前项目中。

Leave a comment

请输入正确的验证码