51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4297|回复: 6
打印 上一主题 下一主题

RFT工具中取html(web)中的表格数据的方法(请高手赐教)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-9-28 22:03:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用RFT工具取网页中的表格数据时,本来异想天开地想使用什么atCell之类的方法(因为看上去挺像是处理这一类问题的),但是不知道是没这种功能还是我不知道怎么用,反正就不会用,于是我就直接取table().getPropertites().get(".text"),这个取出来就是一个字符串,各行的数据完全粘在一个字符串中了(还好有空格),于是我需要根据规则来分解数据,假如数据格式如下:
Date                     colnameA   colnameB    colnameC     <——假设这是表头,下面的是数据

2009/09/24             xxxxxx         xxxxxx         xxxxxx

2009/09/25             xxxxxx         xxxxxx         xxxxxx

2009/09/26             xxxxxx         xxxxxx         xxxxxx

2009/09/27             xxxxxx         xxxxxx         xxxxxx

那么就先看看表头的最后一个字段跟数据的第一个字段(即colnameC和2009/09/24)之间有没有什么特征,如果第一列的数据特征很明显,比如是时间格式,如2009/09/24,那么你就可以根据这个来分解。当遇到xxxx/xx/xx时就分行,到此,就进行了行的分解(使用split方法,我所做的项目只要分解到此就可以了)。如果还需要继续进行单元格的分解,那么就在刚才的基础上,再根据单元格之间有空格来分解(当然,如果是在一个单元格中就有空格,那就另想办法吧),这样就完成了整个表的分解了。反正原则是根据有特征的值来分解,但有一个限制就是特征必须很明确,否则,假设第一列的数据是一个序号,如1,2,3...,那么这样就没法分解了。我现在的项目中正是遇到了这个问题。 附数据的格式:

No.     colname   colname    colname     <——假设这是表头,下面的是数据

1           xxxxxx         xxxxxx         xxxxxx

2           xxxxxx         xxxxxx         xxxxxx

3           xxxxxx         xxxxxx         xxxxxx

4           xxxxxx         xxxxxx         xxxxxx
我现在需要实现的目的是,取这个表格的数据,一行就串成一个字符串即可,目的是为了跟数据库中查询的记录一致的格式。不知道该如何实现了。。。。哎,很郁闷~~不知道哪位高手能不能给指点一下。谢了~~~

[ 本帖最后由 lovecy 于 2009-9-28 22:10 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-9-29 09:35:19 | 只看该作者
能再把你的问题明确一下么?你不是已经有了那样的一个二维数组了吗?如果是为了将一行串成一个字符串,那么就读取二维数组的每一行,存储到一个新的一维数组里不就可以了吗?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-9-30 09:36:33 | 只看该作者
回dreaamever,简单点说吧,html中的表格数据一般怎么取?
注意,用RFT插入测试对象(或录制对象)时,只能取整个表格,而不能取行或单元格,所以,我是通过取table().getProperities()中的.text属性,但是这个属性呢,就把表格中的所有数据都粘成字符串了,比如,在1楼中表1的数据取到的就是:
Date   colnameA   colnameB    colnameC    2009/09/24     xxxxxx       xxxxxx       xxxxxx    2009/09/25             xxxxxx      xxxxxx      xxxxxx    2009/09/26     xxxxxx      xxxxxx       xxxxxx  2009/09/27    xxxxxx      xxxxxx      xxxxxx
这个还算好分,因为第一列都是yyyy/mm/dd格式的数据,所以可以按照遇到yyyy/mm/dd就换行,从而达到分解后的数据可以跟数据库中查询出来的一致。但是1楼中的表2的数据如何去换行呢?它也粘成一个字符串了,要知道,它的第一列就是一个数值而已,肯定不可能按照遇到数值就换行吧?因为上一行的最后一列也有可能是数值。

[ 本帖最后由 lovecy 于 2009-9-30 09:38 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-9-30 11:05:50 | 只看该作者
先取回整个表的内容。再取指定 的单元格
        /**                               
        *返回表格的数据
        *@param a:表格对象
        */
        public static Object gettable(TestObject a,int row,int col)
        {   ITestDataTable myTable;
        myTable = (ITestDataTable)a.getTestData("grid");
        return  myTable.getCell(row,col);
        }
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2009-9-30 12:08:21 | 只看该作者
原帖由 lnn693 于 2009-9-30 11:05 发表
先取回整个表的内容。再取指定 的单元格
        /**                               
        *返回表格的数据
        *@param a:表格对象
        */
        public static Object gettable(TestObject a,int row,int col)
        {   ITestDataTable myTable;
        myTabl ...

这个方法极好,以前都没注意到过还有这样的方法,赞一个~!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-10-13 01:01:21 | 只看该作者
原帖由 lnn693 于 2009-9-30 11:05 发表
先取回整个表的内容。再取指定 的单元格
        /**                               
        *返回表格的数据
        *@param a:表格对象
        */
        public static Object gettable(TestObject a,int row,int col)
        {   ITestDataTable myTable;
        myTabl ...

确实,兄弟厉害,其实这个方法返回表格中的所有数据会比较好一点
public class TableData
{
        public static ITestDataTable gettable(TestObject a)
        {   
          ITestDataTable myTable;
          myTable = (ITestDataTable)a.getTestData("grid");
          return  myTable;
        }
}
再引用该方法
public void testMain(Object args[])
{
      TableData td=new TableData();
      ITestDataTable tableData=td.gettable("表格对象");
      int col=tableData.getColumns();
      int row=tableData.getRows();
      String rowString="";
      for(int i=0;i<row;i++)
      {
          for(int j=0;j<col;j++)
          {
              rowString += tableData.getCell(i,j)+" ";
          }
          rowString +="\n";
       }
}
这样就把所有的行以空格隔开,串成一个字符串,确实比我以前的做法要好很多~~~哈哈哈...
多谢兄台了

[ 本帖最后由 lovecy 于 2009-10-16 23:27 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2009-10-16 23:45:27 | 只看该作者
改进了一下

//该方法用于返回整个表格的数据,传递参数为表格对象
public void getTableData(TestObject  tableObject)
{
  //取表格的数据
  ITestDataTable tableData = (ITestDataTable)tableObject.getTestData("grid");
  //取表格的行数
  int col = tableData.getColumns();
  //取表格的列数
  int row = tableData.getRows();

  String rowConnectString = "";
  //循环取表格单元格的值,用空格隔开,然后换行
  for(int i = 0 ; i < row ; i++)
  {
    for(int j = 0 ; j < col ; j++)
    {
      rowConnectString += tableData.getCells(i , j) + "  ";
    }   
    rowConnectString += "\n";
  }
}
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-11 08:20 , Processed in 0.083783 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表