Watin:迭代telerik gridview中的文本框

时间:2012-02-07 23:13:08

标签: c#-4.0 watin

我目前正在为使用Telerik ASP.Net框架的Web数据输入应用程序开发一个测试框架,并且遇到了阻塞程序。如果我在调试模式中单步执行代码,测试将找到我要查找的文本框并输入一些测试数据,然后将该数据保存到数据库中。我遇到的问题是,当我让测试自己运行时,测试失败,说它无法使声明的列变细。这是我的代码:

/*Method to enter test data into cell*/
private TableCell EditFieldCell(string columnHeader)
{
 var columnIndex = ColumnIndex(columnHeader);

 if (columnIndex == -1)
    throw new InvalidOperationException(String.Format("Column {0} not found.", columnHeader));

 return NewRecordRow.TableCells[columnIndex];
}

/*Method to return column index of column searching for*/
public int ColumnIndex(string columnHeader)
{
 var rgTable = GridTable;
 var rgCount = 0;
 var rgIndex = -1;

 foreach (var rgRow in rgTable.TableRows)
 {
      foreach (var rgElement in rgRow.Elements)
      {
       if (rgElement.Text != null)
       {
        if (rgElement.Text.Equals(columnHeader))
        {
          rgIndex = rgCount;
          break;
        }
       }
       rgCount++;
     }
 return rgIndex;
 }

我的想法是我的嵌套for循环的东西出现了问题,因为当我让程序运行时返回的rgIndex值是-1,它告诉我for循环中的代码没有被运行。 / p>

TIA, 比尔杨曼

1 个答案:

答案 0 :(得分:0)

获取表列索引的代码。您需要传递表(验证调试时表是否存在):

 public int GetColumnIndex(Table table,  string headerName)
    {
        ElementCollection headerElements = table.TableRows[0].Elements; //First row contains the header
        int counter = 0;
        foreach (var header in headerElements)
        {
            if (header.ClassName != null && header.ClassName.Contains(headerName)) //In this case i use class name of the header you can use the text
            {
                return counter;
            }
            counter++;
        }
        // If not found
        return -1;
    }