Watin: перебирая текстовые поля в сетке телерика - PullRequest
0 голосов
/ 08 февраля 2012

В настоящее время я разрабатываю среду тестирования для приложения ввода веб-данных, которое использует инфраструктуру Telerik ASP.Net и столкнулось с блокировщиком.Если я переберу свой код в режиме отладки, тест найдет нужное текстовое поле и введет некоторые тестовые данные, а затем сохранит эти данные в базе данных.Проблема, с которой я сталкиваюсь, состоит в том, что, когда я позволяю тесту выполняться самостоятельно, тест завершается ошибкой, говоря, что он не может оштрафовать объявленный столбец.Вот мой код:

/*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 не выполняется.

TIA, Билл Янгман

1 Ответ

0 голосов
/ 08 февраля 2012

Код, который получает таблицу Столбец индекса. Вам необходимо передать таблицу (убедитесь, что таблица существует во время отладки):

 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;
    }
...