В WatiN, как проверить заголовки столбцов и строки таблицы? - PullRequest
0 голосов
/ 07 июля 2011

Рассмотрим эту таблицу HTML:

<table id="build-table">
    <tr>
        <th>Build ID</th>
        <th>Build Time</th>
    </tr>

    <tr>
       <td>
            <a href="/Details/5.1">5.1</a>
        </td>
        <td>02.06.2011 13:33:03</td>
    </tr>
</table>

Как мне проверить в WatiN, что таблица имеет правильные заголовки (идентификатор сборки и время сборки) и правильное содержимое (в данном случае, одну строку, содержащую данную строку гиперссылки и дату)?

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Извините, мы создали пользовательский TableHandler, используя основные строительные блоки таблицы: Вот пример кода:

public TableController(Regex tableControlId)
{ InitializeMembers(Find.ById(tableControlId), true); }

private void InitializeMembers(WatiN.Core.Constraints.AttributeConstraint tableControlId, bool hasColumnHeaders)
{
    if (tableControlId == null)
    {
        throw new ArgumentNullException("tableControlId", "'tableControlId' passed in should not be null.");
    }

    WatiN.Core.Constraints.AttributeConstraint newTableControlId = tableControlId;
    Assert.IsTrue(IE.Table(newTableControlId).Exists, "Table with id '" + newTableControlId.ToString() + "' does not exist on this page.");
    _controlId = tableControlId;
    _hasColumnHeaders = hasColumnHeaders;

    _columnHeaders = (hasColumnHeaders) ? GetTableColumnHeaders() : null;
    _totalRows = Table.TableRows.Count;
    _totalColumns = GetAllColumnDataFromRow((TableRow)Table.TableRows[0], hasColumnHeaders).Count;
}

private StringCollection GetTableColumnHeaders()
{
    return GetAllColumnDataFromRow((TableRow)Table.TableRows[0], true);
}


private StringCollection GetAllColumnDataFromRow(TableRow tableRow, bool isTableHeaderRow)
{
    StringCollection RowValues = new StringCollection();
    if (tableRow == null)
    {
        for (int colCounter = 0; colCounter < this.TotalColumns; colCounter++) RowValues.Add(String.Empty);
    }

    if (isTableHeaderRow)
    {
        foreach (Element e in tableRow.Elements)
        {
            if (e.TagName == "TH")
            {
                 RowValues.Add(e.Text);
            }
         }
    }
    else
    {
        foreach (TableCell tc in tableRow.TableCells)
        {
            if (String.IsNullOrEmpty(tc.Text))
            {
                RowValues.Add(String.Empty);
            }
            else
            {
                RowValues.Add(tc.Text);
            }
        }
     }
    //fill up for the missing cells, if any, with blanks
    int actualCellsInRow = tableRow.TableCells.Count;
    int expectedCellsInRow = this.TotalColumns;
    for (int colCounter = actualCellsInRow; colCounter < expectedCellsInRow; colCounter++)
    {
        RowValues.Add(String.Empty);
    }

    return RowValues;
}

Надеюсь, это поможет.

0 голосов
/ 08 июля 2011

Есть как минимум три способа сделать это:

  1. Я думаю, что Ватин предоставляет методы, связанные с обработчиками таблиц / таблицами, с помощью которых вы можете получить эту информацию. Возможно, вы захотите поискать по этой теме, если вы хотите использовать этот подход.

  2. Использование запроса Xpath (XML). Поскольку у вас есть идентификатор таблицы, вы можете использовать запрос XPath, чтобы добраться до узла, где находится ваш заголовок, и проверить это, используя статическую строку «Build ID» в своем коде. То же самое с другими частями информации.

  3. Regex - Используя регулярные выражения, вы можете проверить, существует ли этот текст на элементе управления / странице. Если вы просматриваете источник своей страницы, вы будете знать шаблон, который вы должны искать на странице. На самом деле, простой Assert.AreEqual (правда, новый Regex («Build ID») Match.Success) должен сделать свое дело. Тем не менее, это проверка, которая делается только для того, чтобы увидеть, существует ли текст на странице. Вы не будете смотреть на что-то кроме этого. Кроме того, если у вас есть несколько вхождений текста, вам следует рассмотреть массив совпадений, которые вы получите, прежде чем сказать «да, нашел его».

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

Приветствие.

...