本主题介绍如何提取值,如此便可在另一个场景步骤或工具中使用(对它进行验证或存储)
章节目录:
在浏览器内容查看器工具中,这将自动添加到浏览器记录的每个场景步骤中,您可以点击呈现视图中的页面元素并自动在这些元素上设置功能测试。如果在随后的回放中验证不满足,则关联的场景步骤将失败。
此外,可以“提取”并存储这些元素中的数据,然后在其他工具中使用这些提取的值(比如,填充表单字段或验证数据)。这允许轻松地设置动态数据验证非常重要的场景。提取的数据可以用于 Web 测试和 service/API 测试。
也可以录制路径的同时从 Web 浏览器中提取 path 元素。要做到这一点,右键点击浏览器中的元素并选择配置验证。将打开一个验证选项对话框。此对话框中的选项将与在录制和回放路径至少一次之后出现的浏览器内容查看器工具中的选项相同。 |
若要验证或存储呈现页面中表现的值,请完成浏览器内容查看器工具配置面板(可以通过双击工具节点进行访问)或操作后浏览器内容选项卡中的以下内容(仅针对提取物):
Click here to log in
”:Click
”,请保留左侧边界空白并在右侧边界中输入“ here
”(包括空格)。here
”,请在左侧边界中输入“Click
”,在右侧边界中输入“to
”(包括空格)。in
”,请输入“log
”(包括空格)作为左侧边界,并保留右侧边界为空白。${My Value}
。该值在执行场景时进行验证或存储。
如果浏览器内容查看器工具没有显示要提取或验证的值,例如,因为关联的场景步骤失败或者因为项目在呈现页面中不可见(例如,一个标题),则可以按照添加测试输出所述手动添加一个浏览器验证工具或浏览器数据库工具。 |
处理动态属性值的一个方法是使用部分字符串 XPath。若要使用 XPath,请确保将浏览器验证工具的元素定位器设置为使用 XPath,然后指定合适的 XPath。有关使用 Xpath 的详情,请参阅 XPath 参考资料。有关使用部分字符串 Xpath 的详情,请参阅支持动态属性值:使用 XPath 匹配部分字符串。 |
可以使用 input.getHTML() 检索浏览器窗口或区域的 HTML。请参阅 com.parasoft.api.BrowserContentsInput 的 Javadoc。可以通过选择 Parasoft> 帮助或帮助 > 帮助内容(取决于您的安装程序),然后找到标题为“Parasoft SOAtest Extensibility API”的手册访问 Javadocs。 例如,下面是搜索 RFC 标题的 JavaScript。
|
浏览器验证工具将链接到测试。此工具将执行验证。如果后续希望修改验证,则可以通过修改此工具设置实现。
验证源的元素在浏览器内容查看器和浏览器验证工具的操作后浏览器内容选项卡中将以实心红色边框突出显示。
浏览器数据库工具将链接到浏览器回放工具中。此工具将存储提取的值。在任何允许参数化值的地方都可以使用提取的值,比如要在后续测试步骤或另一个工具中输入的值。如果后续希望修改存储的值,则可以通过修改此工具设置实现。
提取源的元素在浏览器内容查看器和浏览器验证工具的操作后浏览器内容选项卡中将以实心灰色边框突出显示。
浏览器验证工具和浏览器数据库工具将链接到如上所述的测试中。此外,将使用紫色虚线突出显示源元素。
若要验证页面上出现的文本(或将文本提取到浏览器数据库),请完成以下内容:
若要创建验证页面颜色的测试,请完成以下内容:
-- rgb(0, 255, 0)
。更多信息,请参阅Validation Colors Mapping File。执行测试时,执行颜色验证。
位于 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/validation/
目录中的 validationColors.txt 文件定义了 SOAtest 如何按名称验证颜色。
文件的每一行都按名称定义一种颜色,以及 RGB 颜色模型的每个组件的范围。指定的范围告诉 SOAtest,如果颜色已验证并且在 RGB 颜色模型的每个组件的范围内,则验证的颜色与这些范围内定义的颜色匹配。例如,此文件中的行可能如下所示:
red, b0-ff, 00-30, 00-30
该行定义“红色”的有效范围。范围使用十六进制符号指定。在上列中,红色的有效 R 范围介于十六进制值 b0 和 ff 之间。其中,红色的有效 G 和 B 范围介于十六进制值 00 和 30 之间。换句话说,如果有一个元素的十六进制值为 #c80000,则它将被视为红色,因为 c8 属于 R 值,介于 b0 和 ff 之间,而且 00 属于 G 和 B 值,介于 00 和 30 之间。然而,如果验证设置在希望为红色的元素上,但是元素颜色的十六进制为 #909090,则 SOAtest 将显示元素存在错误颜色的消息。
映射文件中已经定义了一些标准颜色。然而,如果希望指定额外的颜色,则可以简单地修改文件。每行只能定义一种颜色。同时,如果希望修改定义颜色的有效 RGB 范围,也可以修改映射文件。范围可以用连接符(b0-ff,正如前面所描述的)指定,也可以是单个值(ff)。如果它们是单个值,则有效值的范围只包含一个值。如前面所提及到的,范围必须使用十六进制符号。
为了该文件上的更改生效,必须重启 SOAtest。
若要验证样式属性,请打开浏览器验证工具的配置面板,然后将验证的元素属性设置为值 "style_" + <the JavaScript name of the property>。
例如,若要验证 text-decoration
样式元素,则在元素属性字段中指定 style_textDecoration
(其中 textDecoration
是指定样式元素 text-decoration
的 JavaScript 方法),并使用预期值控件指定属性所需值。在 text-decoration
情况中,预期值可能等于 line-through
或 underline
。
如果希望在验证向导中将某个风格属性作为可用属性显示,则可以将该风格添加至验证风格列表中。
位于 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<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> 显示视图> 控制台),显示测试执行期间使用的存储的数据库变量。详情请参阅控制台视图。
XPath 可以用于指定复杂的验证。若要使用 XPath,请确保将浏览器验证工具的元素定位器设置为使用 XPath,然后指定合适的 XPath。有关使用 XPath 的详情,请参阅 XPath 参考资料。
如果希望执行 GUI 空不能正确表示的复杂验证,则可以使用脚本来表示它们。为此,将浏览器验证工具的元素定位器更改为使用脚本,然后指定合适脚本。
例如,假设希望验证表中所有行。该表的长度可以是可变的。可以附加一个扩展工具到浏览器功能测试中,并从 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); } } |