lovecy 发表于 2009-9-28 22:03:32

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

使用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 编辑 ]

dreamever 发表于 2009-9-29 09:35:19

能再把你的问题明确一下么?你不是已经有了那样的一个二维数组了吗?如果是为了将一行串成一个字符串,那么就读取二维数组的每一行,存储到一个新的一维数组里不就可以了吗?

lovecy 发表于 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       xxxxxx2009/09/27    xxxxxx      xxxxxx      xxxxxx
这个还算好分,因为第一列都是yyyy/mm/dd格式的数据,所以可以按照遇到yyyy/mm/dd就换行,从而达到分解后的数据可以跟数据库中查询出来的一致。但是1楼中的表2的数据如何去换行呢?它也粘成一个字符串了,要知道,它的第一列就是一个数值而已,肯定不可能按照遇到数值就换行吧?因为上一行的最后一列也有可能是数值。

[ 本帖最后由 lovecy 于 2009-9-30 09:38 编辑 ]

lnn693 发表于 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");
      returnmyTable.getCell(row,col);
        }

dreamever 发表于 2009-9-30 12:08:21

原帖由 lnn693 于 2009-9-30 11:05 发表 http://bbs.51testing.com/images/common/back.gif
先取回整个表的内容。再取指定 的单元格
        /**                               
        *返回表格的数据
        *@param a:表格对象
        */
        public static Object gettable(TestObject a,int row,int col)
        {   ITestDataTable myTable;
      myTabl ...
这个方法极好,以前都没注意到过还有这样的方法,赞一个~!

lovecy 发表于 2009-10-13 01:01:21

原帖由 lnn693 于 2009-9-30 11:05 发表 http://bbs.51testing.com/images/common/back.gif
先取回整个表的内容。再取指定 的单元格
        /**                               
        *返回表格的数据
        *@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");
          returnmyTable;
      }
}
再引用该方法
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 编辑 ]

lovecy 发表于 2009-10-16 23:45:27

改进了一下

//该方法用于返回整个表格的数据,传递参数为表格对象
public void getTableData(TestObjecttableObject)
{
  //取表格的数据
  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]
查看完整版本: RFT工具中取html(web)中的表格数据的方法(请高手赐教)