IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Rational  >

使用 IBM Rational Functional Tester 操作 HTML 表格单元中包含的对象

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 初级

Prakash Dewan, 系统软件工程师, IBM

2009 年 10 月 22 日

本文向您展示了如何使用 IBM Rational Functional Tester 来自动化 HTML 表格单元内嵌的对象,同时保持对特定的单元格的引用。这一方式可以帮助您实现对这些对象的自动化操作。

HTML表格结构和包含的对象

所谓的 HTML 表就是多个<TR>(表格行)标签的集合。每一个 <TR> 标签都包含了多种 <TD>(表格定义)标签,每一个标签都与一个单元相对应。所有这些 <TR><TD> 标签,放在一起可以放在 <TBODY>(表格主体)标签之下。图 1 显示了这种结构。


图 1. HTML 表格标签结构
<TABLE>, <TBODY>, <TR>, 和 <TD> 标签

HTML 是网络程序的有机组成部分,它们在结构上从简单到复杂,它们可以含有单元中的对象,例如文本区域、复选框、单选按钮、控制按钮、图形、选择列单等等,如图 2 所示。


图 2. HTML 表格单元内包含的对象
列显示引用元素的表格

如果您检查图 2 所示的网页的源代码,您就会发现每一个对象都包含在开始符 <TD> 和结束符 </TD> 标签之内(换句话说,都包含在表格单元之内)。





回页首


识别含有的对象

默认条件下,IBM® Rational® Functional Tester Test Object Inspector 特性会识别表格单元内的文本区域,如图 3 所示。文本区域不会引用包含它的表格单元,并且会作为 HTML 表格的直接子代而显示。


图 3. 默认的父级层级结构
Test Object Inspector 视图

默认条件下,您不能看到 Html.TBODYHtml.TR, 以及 Html.TD 类的对象,因为它们并不是 RFT 可映射的对象。您可以通过选择 Options 并清除对 Hide not mappable 的选择,以在对象层级结构中查看它们(见于图 4)。


图 4. 清除“Hide not mappable”选项的选择
菜单选项

在您清除选项的选择之后,Test Object Inspector 将会识别 HTML 表格内的文本区域为 TD 类对象的子代,而不是直接识别 HTML 表格(图 5)。


图 5. 包含的元素作为 TD 元素中的子代
新元素显示: Not Mapped TD, TR, 和 TBODY

在 Rational Functional Tester 中,操作与行和列(就是表格单元)相关的表格单元中的对象,并不如操作对象而不引用单元来的直接。





回页首


对引用表格单元对象的操作

对于 HTML 表格单元中的对象,您可以执行一些操作。在自动化期间,您可以时常找到机会自动化对对象的操作,这些对象包含在引用行和列的 HTML 表格单元中。

这样的操作如下所示:

  • 设置文本区域的 Row 值为 3,Column 值为 4,或者 HTML 表格的单元(3,4)
  • 从列表框中设置选项 Row 为 5,Column 为 2,或者单元(5,2)
  • 点击指定表格单元内的单选按钮
  • 在指定的表格单元内设置复选框的状态(例如,选中或者未选中)
  • 在指定的表格单元内点击一个按钮或者图像

除了执行对象上的操作,您还可以应用相同的操作,以提取或者生成对象属性的输出。您也可以对对象状态和属性进行验证。





回页首


三步的操作

使用 Rational Functional Tester 自动对 HTML 表格单元内对象的操作,需要分三步:

  1. 基于行和列的标记,通过使用 find()方法,来找到并设置 HTML 表格单元的对象。
  2. 使用单元对象,找到需要执行操作的对象(例如,文本框,按钮等等)。
  3. 对对象执行需要的操作(例如,点击、选择、导出属性等等)。

以下内容向您展示了三步操作步骤。该例为表格单元内文本框设置了值。

第 1 步 找到一个 HTML 表格单元的对象

假设 tableObj 就是 TestObject 类的 HTML 表格对象,使用如列表 1 所示的代码。


列表 1. 找到一个 HTML 表格单元
TestObject cellObj = tableObj.find(atList(
                    atChild(".class" , "Html.TBODY"),
                    atChild(".class" , "Html.TR",".rowIndex", rowIndex),
                    atChild(".class" , "Html.TD",".cellIndex",colIndex)
                    ), false)[0];

该代码集成使用了 find()方法,atList()方法,以及 atChild() 方法,来得到行和列指示指定的 HTML 表格单元的对象。第二个值为 false 的参数,指定了您所寻找的对象,并不是一个可映射的对象。

第 2 步 找到单元中的对象

为了得到表格单元内的对象(例如,文本框),使用如列表 2 所示的代码。


列表 2. 找到一个包含的对象
TestObject cellTxtObj = cellObj.find(atDescendant(".class","Html.INPUT.text"))[0];

如果在一个单元中有不止一个相同类型的对象(例如,在同一单元中有两个或者更多的文本框),那么就是用类指示符,来识别需要的对象。假设 objIndex 就是您所关注单元对象的类指示符,您可以通过使用列表 3 显示的方法来得到对象。


列表 3. 识别对象
TestObject cellTxtObj = cellObj.find(atDescendant(".class","Html.INPUT.text"))[objIndex];

第 3 步 执行对含有对象的操作

当第 2 步中的方法 find() 返回 TestObject 时,您就需要将其分配给与对象相关的类,这样您就可以执行需要的操作了。在列表 4 中,cellTxtObj 被归类为 TextGuiTestObject,以执行 setText() 方法。


列表 4. 向类添加对象
((TextGuiTestObject)cellTxtObj).setText(txtValue);





回页首


找到与设置 HTML 对象的操作方法

您可以使用列表 5 所示的操作,以找到 HTML 表格单元内的所有 HTML 对象。在您找到对象之后,您就可以对它们执行所需的操作了。


列表 5. 方案代码
/* This method will return an object of the specified HTML class, wrapped inside
a table cell 
 * @return TestObject: Object of wrapped HTML element or null (if the object
is not found)  
 * @param tableObj: the concerned web table object  
 * @param rowIndex: the row index of the concerned cell (starting from 0)
 * @param colIndex: the column index of the concerned cell (starting from 0)
 * @param htmlClass: the HTML class of the object wrapped inside the cell
 * @param classIndex: the HTML class of the object wrapped inside the cell
 */

public TestObject childObject(TestObject tableObj, int rowIndex, int colIndex, 
String htmlClass, int classIndex)
        {
        TestObject cellObj = tableObj.find(atList(
                            atChild(".class" , "HTML.TBODY"), 
                            atChild(".class" , "HTML.TR",".rowIndex", rowIndex),
                            atChild(".class" , "HTML.TD",".cellIndex",colIndex)
                                      ), false)[0];
        TestObject []wrappedObj = cellObj.find(atChild(".class",htmlClass));
        
        if(wrappedObj.length < classIndex + 1)
              return null;
        else	
              return wrappedObj[classIndex];
        }

使用示例

接下来的例子(列表 6 到 8)假设 hTable 是定义 childObject() 方法的类的对象。


列表 6. 在单元(4,4)中选择一个复选框
TestObject cellCheckboxObj = hTable.childObject(tableObj,4,4,"Html.INPUT.checkbox",0);
((ToggleGUITestObject)cellCheckboxObj).setState(SELECTED);


列表 7. 在单元(5,6)中点击第二个按钮(例如 classIndex 1)
TestObject cellBtnObj = hTable.childObject(tableObj, 5, 6, "Html.INPUT.button", 1);
((GuiTestObject)cellBtnObj).click();


列表 8. 从单元(2,2)中的文本框导出属性组
TestObject cellBtnObj = hTable.childObject(tableObj, 5, 6, "Html.INPUT.button", 1);
((GuiTestObject)cellBtnObj).click();





回页首


处理样例文件

  1. 下载 developerWorks.zip 文件,它是一个 Rational Functional Tester 项目的范例(请查看 下载)。
  2. 导出压缩文件到 developerWorks 文件夹。
  3. 启动 Rational Functional Tester,选择 File > Connect to a Functional Test Project,浏览 developerWorks 文件夹,并点击 Finish。功能性测试项目就会在 Rational Functional Tester 中打开。
  4. 下载并导出 SampleHtmlTable.zip 文件,其中含有复杂 HTML 表格的范例 Web 网页,如图 2 所示。
  5. 在 Microsoft Internet Explorer® 中打开 dWSample.html 文件。
  6. 在 Rational Functional Tester 中,运行 dWExample.java。




回页首


从本文学到了什么

本文向您介绍了,使用 IBM Rational Functional Tester 自动化 HTML 表格单元中的对象的方法。这种方法包括对这些对象执行不同的操作,并导出您可以用于实施定义的验证点的对象。您可以使用这些技术,作为开发更复杂 HTML 表格方案的基础。






回页首


下载

描述名字大小下载方法
Sample ApplicationSampleHtmlTable.zip2 KBHTTP
Sample Rational Functional Tester ProjectdeveloperWorks.zip5 KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论


关于作者

Prakash Dewan 的照片

Prakash Dewan 是位于印度 Pune 的 IBM 软件研究所的 IBM Cognos 工程团队的一名成员。除了使用 Rational Functional Tester 进行自动化测试之外,他还从事产品的各种特性和功能的验证和确认。Prakash 具有计算机应用软件的硕士学位,并在开发自动化框架方面有很深的技能。他在高级测试主题的培训方面也具有丰富的经验,并贡献了一些知识库的文章。




对本文的评价








IBM 和 IBM 商标属于国际商业机器公司,包括美国以及其它国家。 Java 和所有基于 Java 的商标属于 Sun 微系统公司,包括美国和其它国家。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款