2011-07-07 16 views
0

考慮這個HTML表:在WatiN中,如何驗證表的列標題和行?

<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> 

我將如何驗證華廷表有正確的頭(生成ID和建造時間),以及正確的內容(在這種情況下,包含給定超一行和日期字符串)?

回答

0

對不起,我們創建一個自定義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

至少有三種方法可以做到這一點:

  1. 我認爲華廷使用tablehandler/tablecontroller相關的方法,你可以檢索這些信息提供。如果您想採用這種方法,您可能需要搜索該主題。

  2. 使用Xpath查詢(XML)。由於您具有表的標識,因此可以使用XPath查詢來訪問標題所在的節點,並驗證是否在代碼中使用了靜態字符串「Build ID」。與其他信息一樣。

  3. 正則表達式 - 使用正則表達式,您可以檢查控件/頁面上是否存在該文本。 如果您查看頁面的來源,您將知道您應該在頁面上查找的模式。事實上,一個簡單的Assert.AreEqual(true,new Regex(「Build ID」)Match.Success)應該可以做到。但是,這是一個檢查,純粹是爲了查看文本是否存在於頁面上。除此之外,你不會看到任何東西。另外,如果你有多次出現的文字,那麼在你說「是的,找到它」之前,你應該考慮你得到的一系列匹配。

注意:您可能必須簽出使用正則表達式的語法。以上信息僅僅是它的樣子的摘要。

乾杯。

+0

1.我無法挖掘任何關於WatiN table {controller,handler}的信息。 2.您能否提供一個如何通過XPath查詢找到節點的具體示例? 3.這種方法太模糊了,所以我會給它一個通行證。 – aknuds1