本主题解释了如何修改 web 场景模拟的用户操作。

本章包含:

配置操作

若要查看和修改特定场景步骤进行的操作:

  1. 双击要配置操作的场景步骤。
  2. 在 GUI 右侧打开的配置面板中,打开 User Action 选项卡。
  3. 查看现有操作(原始操作是在录制过程中捕捉到的),并根据需求修改设置,以指定要执行的操作。可以从可用的预设置操作中进行选择,或者定义一个自定义操作。

使用数据源参数化用户操作

可以使用数据源对用户操作进行参数化。例如,要使类型操作遍历存储在 Excel 电子表格中的一组不同值。



有关如何添加并使用数据源参数化测试的更多详情,请查阅 使用数据源、变量或来自其他测试的值对测试进行参数化

标识与用户操作关联的元素

作为用户操作源的元素,它将在场景步骤的预操作浏览内容选项卡中以纯蓝色边框突出显示。

更改用户操作的目标

若要快速更改用户操作目标,则右键单击 Pre-Action Browser Contents 选项卡中的相关元素,然后选择合适的 Modify 命令。



如果要更改的用户操作与特定元素之间没有关联(例如,“close”或“navigate”操作),则可右键单击 Pre-Action Browser Contents 选项卡汇总的任意位置,然后选择 Change User Action。 



它将打开允许更改目标的 User Action 选项卡。


检查 HTML 中的元素 

在创建和修改用户操作的页面元素时,您可能希望检查 HTML,以确定操作是否正在向合适的元素添加操作。 

若要查看给定元素的 HTML,可以通过右键单击该元素,然后从快捷菜单选择 Inspect <Element> 。



了解预设置操作

可以通过从预设置操作列表中进行选择,然后根据需求自定义它们,以满足您的需要,进而配置最常见的用户操作。可用的预设置操作如下所述。

通用配置控件

很多预设置用户操作的配置部分都包含 "Element Locator” 部分。该部分允许通过元素属性、XPath 或脚本来指定与操作相关联的元素。



Use Xpath 允许输入用作标识符的 XPath。

Use Script 允许输入指定所需用户操作的脚本。

Use Element Properties 允许通过以下控件指定属性:

  • Element:指定操作应该应用的元素的名称(例如,"img", "div", 或 "a")。若要允许任何元素,则向该字段输入 "Any" 。
  • Attribute Name:指定标识元素的属性名称(如,"title", "id", 或 "name")。可以使用以下其中一项机制配置该值。
  • Attribute Value:指定 Attribute Name 字段提供的属性的期望值。
    • 如果希望指定固定值,则选择 Fixed 选项,然后在文本框中指定所需值。
    • 如果希望使用数据源中定义的值,则选择 Parameterized 选项,然后指定包含要使用的值的数据源列。注意,只有在项目包含至少一个数据源时,该选项才可用。
    • 如果希望使用自定义方法的返回值,则选择 Script 选项。单击 Edit 按钮以创建或编辑方法,然后选择需要的方法,以便在弹出对话框的 Method 下拉菜单中使用。如果存在两个或多个方法,您还可以选择不同的方法,以便在表单面板中下拉菜单中使用。
  • Index:指定与前面标准匹配的元素。输入 "0” 表示将使用匹配 "Element," "Attribute Name,” "Attribute Value” 的第一个元素。输入 "1” 表示将使用匹配的第二个元素,以此类推。
    • 如果希望指定固定值,则选择 Fixed 选项,然后在文本框中指定所需值。
    • 如果希望使用数据源中定义的值,则选择 Parameterized 选项,然后指定包含要使用的值的数据源列。注意,只有在项目包含至少一个数据源时,该选项才可用。
    • 如果希望使用自定义方法的返回值,则选择 Script 选项。单击 Edit 按钮以创建或编辑方法,然后选择需要的方法,以便在弹出对话框的 Method 下拉菜单中使用。如果存在两个或多个方法,您还可以选择不同的方法,以便在表单面板中下拉菜单中使用。

同时,还需注意,很多操作允许配置 Window Name。这允许指定希望在其中执行操作的窗口的名称。保留该字段为空白表示使用默认窗口。


指定专门的元素定位器(CSS, ALT 属性,等。)

使用 Selenium,您可以通过将 Element Locator 设置为 Use XPath,然后将其中一个可用定位器前缀设置为所需值,以指定不同的专门化元素定位器。可用的前缀有:

  • alt=<alt attribute value>
  • class=<class attribute value>
  • css=<css-style locator>
  • dom=<dom-style locator>
  • id=<id attribute value>
  • identifier=<id or name attribute value>
  • link=<link text>
  • name=<name attribute value>
  • xpath=<xpath to element>

例如,若要使用 CSS 定位器 tag.classA,则使用 XPath 定位器 css=tag.classA

弹出对话框错误

如果在接受脚本对话框(Accept Script Dialog)、取消脚本对话框(Dismiss Script Dialog)或键入脚本对话框(Type into Script Dialog)之外的操作中打开三种类型的 JavaScript 弹出对话框(警告框、确认框和提示框)的其中一个,则将报告一个错误,除非您正在使用 Selenium 引擎,而这是您的场景中的最后一个测试。 

如果在 Selenium 引擎的等待操作期间打开一个弹出框,则将不会报告错误。

接受脚本对话框

只适用于 Selenium

此操作在三种类型的 JavaScript 弹出对话框(警告框、确认框和提示框)上按下 OK 按钮。

Addselection

对于多选组合框,此操作将向选择项添加一个选项。这可以是第一个选择,也可以是一个额外的选择。若要选择多个项目,请多次使用此操作。

Answeronnextprompt

9.8 版本已弃用该选项,当前引擎没有记录。

此操作向提示框添加文本。此操作已弃用;使用接受脚本对话框、键入脚本对话框和取消脚本对话框代替。

配置说明:

  • 此操作必须在导致打开提示框的用户操作之前立即添加到场景中。

Assertalert

9.8 版本已弃用该选项,当前引擎没有记录。

此操作验证警告框信息中的文本。此操作已弃用;使用接受脚本对话框、键入脚本对话框和取消脚本对话框代替。

配置说明:

  • 此操作必须在导致打开警告框的用户操作之后立即添加到场景中。

Assertconfirmation

9.8 版本已弃用该选项,当前引擎没有记录。

此操作验证确认框信息中的文本。此操作已弃用;使用接受脚本对话框、键入脚本对话框和取消脚本对话框代替。

配置说明:

  • 此操作必须在导致打开确认框的用户操作之后立即添加到场景中。

Assertprompt

9.8 版本已弃用该选项,当前引擎没有记录。

此操作验证提示框信息中的文本。此操作已弃用;使用接受脚本对话框、键入脚本对话框和取消脚本对话框代替。

配置说明:

  • 此操作必须在导致打开提示框的用户操作之后立即添加到场景中。

Check

此操作选中多选框。

Choosecancelonnextconfirmation

9.8 版本已弃用该选项,当前引擎没有记录。

此操作按住确认框中的 Cancel 按钮。此操作已弃用;使用接受脚本对话框、键入脚本对话框和取消脚本对话框代替。

配置说明:

  • 此操作必须在导致打开确认框的用户操作之前立即添加到场景中。

Click

此操作单击指定的元素。

配置说明:

  • 使用 Key Modifiers 指定是否要模拟单击期间按 Alt、Ctrl 或 Shift 键的用户。

Close

此操作关闭指定的窗口。

取消脚本对话框

只适用于 Selenium

对于弹出框(警告框、确认框和提示框),此操作可以按 Cancel 按钮(用于确认和提示),也可以按 X(用于所有 3 种类型的警告框)。

Doubleclick

此操作双击一个元素。

Dragdrop

此操作将一个元素拖到另一个位置。

配置说明:

这有 4 种表示如何移动元素的方法。对于所有以下指示器,操作都从将被拖动的元素开始。所有的数字都是以像素为单位的。4 个选项包括:

  • 移动到目标元素:<some locator, like //div[@id="example"]> 通过单击源元素的左上角拖动源元素,并将其拖至目标元素的左上角。
  • Start at offset and move by delta: offsetX,offsetY|deltaX,deltaY 从源元素的左上角开始拖动源元素 offsetX, offsetY,然后移动 moving deltaX, deltaY。负增量将元素向上向左移动。

  • Move by delta: deltaX,deltaY 通过单击元素中心并移动 deltaX, deltaY 来拖动源元素。负增量将元素向上向左移动。
  • 移动到元素内的偏移量:<some locator>|offsetX,offsetY 通过单击源元素左上角拖动源元素,并从目标元素的左上角拖动到目标元素的偏移量 offsetX,offsetY。偏移量 0,0 恰好处于左上角,其功能与“移动到目标元素”相同。负偏移量将是目标元素左上角上方或左侧的一个点。

执行 JavaScript

只适用于 Selenium

此操作执行当前 web 页面内指定的 JavaScript。指定的 JavaScript 将在与元素定位器定义元素相同的框架中执行。如果没有定义任何元素,则 JavaScript 将在最上面的框架中执行。

若要配置该用户操作:

  1. 表明应该执行什么 JavaScript。可以将 JavaScript 复制/键入到文本框中,或提供一个到 JavaScript 文件的路径。
  2. 单击 Evaluate ,以检查将运行的脚本(不包括语法错误)。JavaScript 语法中编译功能的错误将出现在 Error message 字段。
  3. 从面板底部的 Method 框中选择合适的参数(从要运行脚本的函数中)。这个列表将由脚本中包含的所有功能定义组成。

配置说明:

  • 在 Element Locator 部分中指定的定位器将作为指定函数的第一个参数传递。例如,假定有
    function userFunction(locator) {
       locator.click();
    }
    。元素定位器中指定的该元素将作为此脚本中的定位器参数传递给函数,这样您就可以按照您的意愿去做。

  • 需要 0 个或 1 个参数。单击时,对话框应该显示类似“此脚本中需要 0 个或 1 个参数”这样的内容。当有一个参数时,该元素是由该用户操作中的元素定位器指定的元素。


示例 - 将鼠标悬停在元素上:

  1. 在执行 JavaScript 操作中输入以下代码:

    function hover(element) {
      if(document.createEvent) {
        var evObj = document.createEvent('MouseEvents'); 
        evObj.initEvent('mouseover', true, false); 
        element.dispatchEvent(evObj);
      } else if(document.createEventObject) {
        element.fireEvent('onmouseover');
      }
    }
  2. 从 Method 选择器中选择 hover() 。



  3. 输入要在其上触发悬停的元素的元素定位器标准。

注意,此代码执行元素上的“onMouseOver”事件。在大多数情况下,这将导致触发悬停行为。在某些情况下,这是不够的,并且需要更多的代码来触发悬停。


示例 - 单击隐藏元素:

  1. 在执行 JavaScript 操作中输入以下代码:

    function click(element) {
      element.click();
    }
  2. 从 Method 选择器中选择 click() 。



  3. 输入要在其上触发点击的元素的元素定位器标准。

注意,此代码元素上的 click 函数。在大多数情况下,这将导致触发点击行为。在某些情况下,这是不够的,并且需要更多的代码来触发点击。

Fireevent

针对遗留

此操作将触发特定页面元素上的 JavaScript 事件。这包括了在页面代码中定义的 JavaScript 事件(对用户不可见)。  

配置说明:

  • 使用 Text Input/Value 字段指定事件。
  • 指定没有“on”前缀的事件。例如,若要触发 onkeypressed 监听器,则需要输入 "keypressed"。

后退

此操作按下浏览器的 Back 按钮。不需要任何参数。

前进

此操作按下浏览器的 Forward 按钮。不需要任何参数。 

Keydown / Keypress / Keyup

针对遗留

这些操作触发元素上的 keydown, keypress, 或 keyup JavaScript 事件。

配置说明:

  • 元素定位器指定元素。
  • 键定位器指定按下哪个键。

最大化窗口

只适用于 Selenium

此操作将指定的浏览窗口最大化。

配置说明:

  • 对于 Mac 上的 Chrome,最大化窗口被解释为“最佳尺寸大小”而不是“填充全屏”,因此浏览器将只会垂直最大化。这与用户单击绿色“加号(+)”按钮来展开窗口的行为相同。

Mousedown / Mouseover / Mouseup

针对遗留

这些操作触发元素上的 mousedown, mouseover 或 mouseup JavaScript 事件。

配置说明:

  • 元素定位器指定元素。

导航

此操作导航到所提供的 URL,就好像它是在浏览器的 URL 栏中输入的一样。

配置说明:

  • 在 URL 字段中,可以输入 FixedParameterized (如果数据源可用),或 Scripted URL。若要输入脚本化 URL,则选择 Scripted,然后单击 EditScript 按钮,输入脚本方法以返回应在所选定操作中导航到的 URL。.

新浏览器

针对遗留

此操作将打开一个将在指定的开始 URL 处填充页面的新浏览器。

其他

允许添加自定义操作。 

刷新

此操作已按下 Refresh 按钮。

Removeselection

在多选组合框汇总,此操作从选择项中移除一个选项。这相当于在选定的组合框中单击 shift。  若要删除多个项目,请多次使用此操作。 

Scroll By

只适用于 Selenium

此操作通过为 x 轴和 y 轴指定的像素数滚动 web 应用程序。负值表示“向左滚动”(针对 x 轴)或“向上滚动”(针对 y 轴)。 

Scroll To

只适用于 Selenium

此操作将 web 应用程序滚动至指定的像素位置(x 轴和 y 轴)。

Select

在单选组合框中,此操作选择组合框中的单选项。如果已经选中一个选项,则此操作将更改选择项。

配置说明:

  • 可以通过值(代码中定义的)或标签(UI 中显示并在代码中定义的)指定要选择的选项。

Submit

此操作提交一个表单或表单内的一个元素到远程服务器。

配置说明:

  • 使用元素定位器表明要提交哪个表单(例如,如果一个页面存在多个表单)。

Type

此操作将指定的文本键入到指定的元素中。

  • 使用 Value 指定要键入的内容。可以输入一个 FixedParameterized (如果数据源可用)或 Scripted 的值。若要输入脚本化的值,则选择 Scripted,然后单击 Edit Script 按钮,输入一个脚本方法以返回应该在所选定操作中键入的值。
  • 如果希望向浏览器发送特殊字符,可以将其直接键入到 Value 字段(仅当键入产生输出或空白时有效,如制表符、空格、分号、添加等。),也可以使用如下 Special Character Mappings for Type Actions 所述的特殊字符映射。

仅键入(无需焦点)遗留内容

此操作将指定的文本键入到指定的元素中 不需任何焦点

  • 如果希望向浏览器发送特殊字符,可以将其直接键入到 Value 字段(仅当键入产生输出或空白时有效,如制表符、空格、分号、添加等。),也可以使用如下 Special Character Mappings for Type Actions 所述的特殊字符映射。

只在脚本对话框中键入 Selenium

此操作将文本输入到提示框中。

配置说明:

  • 它必须放在打开对话框的操作之后,然后是接收脚本对话框操作(它提交指定的文本)。
  • 如果希望向浏览器发送特殊字符,可以将其直接键入到 Value 字段(仅当键入产生输出或移动鼠标,如制表符、空格、分号、添加等),也可以使用如下 Special Character Mappings for Type Actions 所述的特殊字符映射。

键入密码

此操作将指定的文本键入到指定的元素中。文本将在字段中屏蔽,并在存储时加密。

  • 使用 Value 指定要键入的内容。可以输入一个 FixedParameterized (如果数据源可用)或 Scripted 的值。若要输入一个脚本化值,则选择 Scripted,然后单击 EditScript 按钮,输入脚本方法,返回应该在所选定操作中键入的值。
  • 如果希望向浏览器发送特殊字符,可以将其直接键入到 Value 字段(仅当键入产生输出或移动鼠标,如制表符、空格、分号、添加等),也可以使用如下 Special Character Mappings for Type Actions 所述的特殊字符映射。

键入密码(无需焦点)

Legacy Only

此操作将指定的文本键入到指定的元素中,不包含任何焦点。文本将在字段中屏蔽,并在存储时加密。

  • 使用 Value 指定要键入的内容。可以输入一个 FixedParameterized (如果数据源可用)或 Scripted 的值。若要输入一个脚本化值,则选择 Scripted,然后单击 EditScript 按钮,输入脚本方法,返回应该在所选定操作中键入的值。

Uncheck

此操作取消选中/清除选中的复选框。

Wait

此操作模拟浏览器继续下一步骤之前等待的指定毫秒数。

  • 对于 Milliseconds,指定希望浏览器等待多久时间。可以输入一个 FixedParameterized (如果数据源可用)或 Scripted 的值。若要输入一个脚本化值,则选择 Scripted,然后单击 EditScript 按钮,输入脚本方法,返回应该在所选定操作中键入的值。

Special Character Mappings for Type Actions

可以使用以下特殊字符映射指定支持 Selenium 类型操作中的特殊字符。

NULL                \uE000
CANCEL              \uE001
HELP                \uE002
BACK_SPACE          \uE003
TAB                 \uE004
CLEAR               \uE005
RETURN              \uE006
ENTER               \uE007
SHIFT               \uE008
CONTROL             \uE009
ALT                 \uE00A
PAUSE               \uE00B
ESCAPE              \uE00C
SPACE               \uE00D
PAGE_UP             \uE00E
PAGE_DOWN           \uE00F
END                 \uE010
HOME                \uE011
LEFT                \uE012
UP                  \uE013
RIGHT               \uE014
DOWN                \uE015
INSERT              \uE016
DELETE              \uE017
SEMICOLON           \uE018
EQUALS              \uE019


Number pad keys

NUMPAD0             \uE01A
NUMPAD1             \uE01B
NUMPAD2             \uE01C
NUMPAD3             \uE01D
NUMPAD4             \uE01E
NUMPAD5             \uE01F
NUMPAD6             \uE020
NUMPAD7             \uE021
NUMPAD8             \uE022
NUMPAD9             \uE023
MULTIPLY            \uE024
ADD                 \uE025
SEPARATOR           \uE026
SUBTRACT            \uE027
DECIMAL             \uE028
DIVIDE              \uE029


Function keys

F1                   \uE031
F2                   \uE032
F3                   \uE033
F4                   \uE034
F5                   \uE035
F6                   \uE036
F7                   \uE037
F8                   \uE038
F9                   \uE039
F10                  \uE03A
F11                  \uE03B
F12                  \uE03C

META                 \uE03D

ZENKAKU_HANKAKU      \uE040

这些字符映射可以与如下列脚本的脚本化“文本输入”值一起使用,该脚本将键入单词“test”,然后发送 tab 键:

def typeTestThenTab() {
	return "test\uE004";
}


注意,这不是一个关键的修饰符。例如,您无法通过发送控件字符然后执行点击事件执行“control-click”。发送字符模拟用户按下和释放相应的按钮。

自定义操作 - 迁移说明

使用 SOAtest 9.9.2 及更早版本,可以添加可以从浏览器回放工具调用的自定义用户操作。这些操作仅应用于使用遗留引擎的执行浏览器场景。它们可以通过两种方式进行添加:通过在 UserCustomizableOptions.js 或在 BrowserDriver.js 中定义新函数。Parasoft 通常推荐在 UserCustomizableOptions.js 中定义自定义操作;但在某些情况下,建议使用 BrowserDriver.js,以便支持 Chrome。 

这些函数将采用这种形式

_wk_BrowserDriver.prototype.doXXX = function(locator) { ....

其中 XXX 是自定义用户操作的名称。 


例如,可以让 UserCustomizableOptions.js 定义一个操作,如下所示:

_wk_BrowserDriver.prototype.doContextMenu = function(locator) { 
var element = this.findElement(locator);
_wk_HTMLUtil.triggerMouseEvent(element, 'contextmenu', true); 
};


然后通过选择 Other 操作并在 contextmenu (仅限遗留引擎)键入,在 SOAtest 中引用此自定义操作。

 从 SOAtest 9.9.3 开始,Firefox (由于新的 Firefox 扩展需求)不再支持像这样的添加自定义操作。对于遗留引擎和 Chrome 或 Internet Explorer 上的回放,仍然支持正确迁移的自定义用户操作。

若要迁移现有自定义操作:

  • 请确保它们被添加到 UserCustomizableOptions.js (不是 BrowserDriver.js)中。
  • 如果脚本引用以 _wk_开头的任何变量,则更改它们以引用 com.parasoft.extension。换句话说,将 _wk_XXX 更改为 com.parasoft.extension.XXX


例如,将上面的示例脚本更改为

com.parasoft.extension.BrowserDriver.prototype.doContextMenu = function(locator) { 
var element = this.findElement(locator);
com.parasoft.extension.HTMLUtil.triggerMouseEvent(element, 'contextmenu', true); 
}


注意, wk_BrowserDriver 变成了 com.parasoft.extension.BrowserDriver ,和 _wk_HTMLUtil 变成了 com.parasoft.extension.HTMLUtil。 

  • No labels