本主题解释了如何提取值,如此便可在另一个场景步骤或工具中使用(对它进行验证或存储)
本章包含:
在浏览器内容视图器工具中,这将自动添加到浏览器记录的每个场景步骤中,您可以单击呈现视图中的页面元素并自动在这些元素上设置功能测试。如果在随后的回放中验证不满足,则关联的场景步骤将失败。
此外,可以“提取”并存储这些元素中的数据,然后在其他工具中使用这些提取的值(比如,填充表单字段或验证数据)。这允许轻松地设置动态数据验证非常重要的场景。提取的数据可以用于 Web 测试和 service/API 测试。
也可以 在 记录路径时从 Web 浏览器中提取 path 元素。要做到这一点,右键单击浏览器中的元素并从快捷菜单中选择 Configure Validations 。将打开一个 Validation Options 对话框。此对话框中的选项将与在至少一次记录和重播路径 之后 出现的浏览器内容视图器工具中的选项相同。 |
若要验证或存储呈现页面中表现的值,请完成浏览器内容视图器工具配置面板(可以通过双击工具节点进行访问)或操作后浏览器内容(Post-Action Browser Contents)选项卡中的以下内容(仅针对提取信息):
Click here to log in
”:Click
”,请保留左侧边界空白并在右侧边界中输入“ here
”(包括空格)。here
”,请在左侧边界中输入“Click
“,在右侧边界中输入“to
”(再次包括空格)。in
”,请输入“log
“(包括空格)作为左侧边界,并保留右侧边界为空白。${My Value}
。该值在执行场景时进行验证或存储。
如果浏览器内容视图器工具没有显示要提取或验证的值,例如,因为关联的场景步骤失败或者因为项目在呈现页面中不可见(比如,一个标题),则可以手动添加一个浏览器验证工具或浏览器数据库工具,如 Adding Test Outputs中所述。 |
处理动态属性值的一个方法是使用部分字符串 XPath。若要使用 XPath,请确保将浏览器验证工具的元素定位器设置为 Use XPath,然后指定合适的 XPath。有关使用 Xpath 的更多详情,请查阅 XPath 参考资料。 有关使用部分字符串 Xpath 的更多详情,请查阅 Handing Dynamic Attribute Values:支持动态属性值 - 使用 XPath 匹配部分字符串Partial String Matching Using XPath. |
可以使用 input.getHTML() 检索浏览器窗口或框架的 HTML。 请查阅 com.parasoft.api.BrowserContentsInput 的 Javadoc。可以通过选择 Parasoft> Help,然后查找书名为“Parasoft SOAtest Extensibility API”的图书,访问 Javadoc。 例如,下面是搜索 RFC 标题的 JavaScript。
|
浏览器验证工具将链接到测试。此工具将执行验证。如果后续希望修改验证,则可以通过修改此工具设置实现。
验证源的元素在浏览器内容视图器和浏览器验证工具的操作后浏览器内容选项卡中将以实心红色边框突出显示。
浏览器数据库工具将链接到浏览器回放工具中。此工具将存储提取的值。在任何允许参数化值的地方都可以使用提取的值,比如要在后续测试步骤或另一个工具中输入的值。如果后续希望修改存储的值,则可以通过修改此工具设置实现。
提取源的元素在浏览器内容视图器和浏览器验证工具的操作后浏览器内容选项卡中将以实心灰色边框突出显示。
浏览器验证工具和浏览器数据库工具将链接到如上所述的测试中。此外,将使用紫色虚线突出显示源元素。
若要验证页面上出现的文本(或将文本提取到浏览器数据库),请完成以下内容:
若要创建验证页面颜色的测试,请完成以下内容:
-- rgb(0, 255, 0)
。有关更多详情,请查阅 Validation Colors Mapping File。执行测试时,执行颜色验证。
在产品安装中,有一个名为“验证颜色映射文件”的文件。 该文件定义 SOAtest 如何按名称验证颜色。 它位于 <SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationColors.txt。
文件的每一行都按名称定义一种颜色,以及 RGB 颜色模型的每个组件的范围。 指定的范围告诉 SOAtest,如果颜色已验证并且在 RGB 颜色模型的每个组件的范围内,则验证的颜色与这些范围内定义的颜色匹配。 例如,此文件中的行可能如下所示:
red, b0-ff, 00-30, 00-30
该行定义颜色“red”的有效范围。 范围使用十六进制符号指定。 在上列中,red 的有效 R 范围介于十六进制值 b0 和 ff 之间。 其中,red 的有效 G 和 B 范围介于十六进制值 00 和 30 之间。 换句话说,如果有一个元素的十六进制值为 #c80000,则它将被视为 red,因为 c8 属于 R 值,介于 b0 和 ff 之间,而且 00 属于 G 和 B 值,介于 00 和 30 之间。 然而,如果验证设置在希望为 red 的元素上,但是元素颜色的十六进制为 #909090,则 SOAtest 将显示元素存在错误颜色的消息。
映射文件中已经定义了一些标准颜色。 然而,如果希望指定额外的颜色,则可以简单地修改文件。 每行只能定义一种颜色。 同时,如果希望修改定义颜色的有效 RGB 范围,也可以修改映射文件。 范围可以用连接符(b0-ff,正如前面所描述的)指定,也可以是单个值(ff)。 如果它们是单个值,则有效值的范围只包含一个值。 如前面所提及到的,范围必须使用十六进制符号。
为了该文件上的更改生效,必须重启 SOAtest。
若要验证样式属性,请打开浏览器验证工具的配置面板,然后将验证的 Element Property 设置为值 "style_" + <the JavaScript name of the property>。
例如,若要验证 text-decoration
样式元素,则在 Element Property 字段中指定 style_textDecoration
(其中textDecoration
是指定样式元素 text-decoration
的 JavaScript 方法),并使用 Expected Value 控件指定属性所需值。 在 text-decoration
情况中,预期值可能等于 line-through
或 underline
。
如果希望在验证向导中将某个风格属性作为可用属性显示,则可以将该风格添加至验证风格列表中。
验证风格列表文件位于 <SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationStylesList.txt
,它指定可验证的运行时风格属性。
该文件格式是每行有一个属性。 默认情况下,color 属性在此文件中指定;不过,可以添加要验证的任何验证风格属性。 为了该文件上的更改生效,必须重启 SOAtest。一旦重启,在右键单击一个元素时,将在打开的验证对话框中看到该文件中指定的属性。 属性将“style_”追加到每个属性后面,以告诉您(和 SOAtest)这些属性引用运行时值单个样式属性。
使用其中一个这些属性的验证设置将验证该样式属性的运行时值。 这是在应用了所有内联样式和 CSS 文件中定义的样式之后属性的运行时值。 为此,该值可能与元素中内联定义的值不同。 例如,这些运行时样式验证允许定义用户在浏览器处理所有样式之后看见的实际颜色。
关于每个验证,如果验证失败,SOAtest 将会自动配置要在质量任务视图(和报告)中显示的消息。此消息通常类似于 "Validation failed for property [property_name]: Actual value found on the page [actual value]" must be equal to expected value [expected value]."
您可以轻松地在应用程序上下文中配置更有意义的自定义消息。例如,假设正在使用网上银行应用程序,并且添加一个验证以检查该账户余额是否为零。在这种情况下,您可能希望指定自定义验证消息为 "Account should not be zero” 而不是使用默认的可能为 "//span[text() = "account" was not found”的内置消息。
若要配置自定义验证:
可以配置控制台视图(Window> Show View> Console),显示测试执行期间使用的存储的数据库变量。有关更多详情信息,请查阅 控制台视图。
XPath 可以用于指定复杂的验证。若要使用 XPath,请确保将浏览器验证工具的元素定位器设置为 Use XPath,然后指定合适的 XPath。有关使用 XPath 的更多详情,请查阅 XPath 参考资料。
如果希望执行 GUI 空不能正确表示的复杂验证,则可以使用脚本来表示它们。为此,将浏览器验证工具的元素定位器更改为 Use Script,然后指定合适脚本。
例如,假设希望验证表中所有行。该表的长度可以是可变的。可以附加一个扩展工具到浏览器功能测试中,并从 input.getDocument() 提供的文档中获取值。下面是实现此目的的示例 JavaScript 脚本。
var Application = Packages.com.parasoft.api.Application; var WebBrowserTableUtil = Packages.webking.api.browser2.WebBrowserTableUtil; var WebKingUtil = Packages.webking.api.WebKingUtil; // Verify that all values in a table column are equal to a previously // extracted value. For example, we searched for all places in which // widget 11 is sold, and we want to make sure that all results are // for widget 11. // input: com.parasoft.api.BrowserContentsInput. // context: com.parasoft.api.ExtensionToolContext. function validateTable(input, context) { // For the column we want to validate. var widgetColumnIndex = 0; // We extracted through a Browser Data Bank in a previous test // the expected value to data bank column "widgetName". // The value was extracted, not from a data source, so use "" or // null (None in Python) as the name of the data source. var expectedWidgetName = context.getValue("", "widgetName"); var document = input.getDocument(); // Table should have some unique identifying attribute (e.g., id). var table = WebBrowserTableUtil.getTable("id", "mytable", document); // If the first row of the table contained column headers, we could // use getCellValuesForColumn(String, Element). For example if the // widget name column was named "Widget Name", then we could use // getCellValuesForColumn("Widget Name", table). In either case, // getCellValuesForColumn returns an array of String objects. See // the JavaDocs for more information. var values = WebBrowserTableUtil.getCellValuesForColumn(widgetColumnIndex, table); if (values.length == 0) { context.report("No rows found!"); } for (var i = 0; i < values.length; ++i) { if (values[i] != expectedWidgetName) { var errorMessage = "Widget name (column " + widgetColumnIndex + "): " + "Expected value '" + expectedValue + "', but found '" + values[i] + "'."; context.report(errorMessage); } } |