2015-04-07 2 views
0

Я использую Watin для тестирования автоматизации с помощью браузера IE. Я новичок в Ватине. Я был заблокирован в задаче получения текста заголовка столбца для кода table.HTML для этой таблицы является то, как показано ниже:Как получить заголовок заголовка столбца таблицы в Watin?

<table id="gvVoiceCallReport" style="width: 100%; border-collapse: collapse; height: 100%;" border="1" rules="all" cellSpacing="0" cellPadding="0"> 
     <tbody> 
      <tr style="background-color: slategray; height: 20px; color: white;"> 
      <th scope="col"> 
      <a style="color: white;" href="javascript:__doPostBack('gvVoiceCallReport','Sort$Caller GCI')"> 
       Text - Caller GCIstyle 
      <th scope="col"> 
       <a style="color: white;" href="javascript:__doPostBack('gvVoiceCallReport','Sort$Callee GCI')"> 
      Text - Callee GCI 
      <th scope="col"> 
       <a style="color: white;" href="javascript:__doPostBack('gvVoiceCallReport','Sort$Originator-Default Bearer Apn')"> 
       Text - Originator-Default Bearer Apn 

      <tr style="cursor: hand;" onmouseover="this.style.cursor='hand';"> 
      <td align="left" onclick="window.open('TestResult.aspx?testSuite=Job.139.1_1504100010110027884023126', 'TestResult', 'height=600,width=900,resizable=yes,scrollbars=yes');"> 
      Text - 310;410;FFFE;9210;B9F 
      <td align="left" onclick="window.open('TestResult.aspx?testSuite=Job.139.1_1504100010110027884023126', 'TestResult', 'height=600,width=900,resizable=yes,scrollbars=yes');"> 
      Text - 310;410;FFFE;9210;B9F 
     .....  
     ...... 
     </table> 

Заголовок текста для этого столбца Caller GCI. Я могу получить текст для значений в этом столбце, используя что-то вроде этого

string columnValueText = mytable.OwnTableRows[1].TableCells[1].Text; 

Когда я пытаюсь получить текст заголовка столбца путем OwnTableRows[0] (индекса к нулю), это дает мне исключение: массив за границами.

Кто-нибудь, пожалуйста, помогите мне получить текст заголовка столбца таблицы.

+0

Я отредактировал html-код для лучшего понимания контекста. –

ответ

3
var gridTableRows = page.Document.Frame(Find.ById("ctl00_MainContentPlaceHolder_ifrmReport")).Table("gvVoiceCallReport").TableRows[0]; 
    StringCollection abc = GetAllColumnDataFromRow(gridTableRows, true); 

    private StringCollection GetAllColumnDataFromRow(TableRow tableRow, bool isTableHeaderRow) 
    { 
     StringCollection RowValues = new StringCollection(); 

     if (isTableHeaderRow) 
     { 
      foreach (Element e in tableRow.Elements) 
      { 
       if (e.TagName == "TH") 
       { 
        RowValues.Add(e.Text); 
       } 
      } 
     } 

     return RowValues; 
    } 
+0

Не могли бы вы подробнее рассказать о своем ответе, добавив немного подробного описания вашего решения? – abarisone

+0

Как известно, заголовок всегда находится на индексе = 0. Я просто привязываю строку заголовка к функции GetAllColumnDataFromRow и проверяю тег . Если тег есть. Сохраните этот текст в stringcollection. –

+1

Спасибо за решение, Ankit. Это работало как прелесть для меня. –

1

Я взял этот кусок html. Вставьте его в index.html.

код, который я использовал:

 FireFox ie = new FireFox(@"D:\index.html"); 
     Table tb = ie.Table(Find.ById("gvVoiceCallReport")); 
     if (tb != null) 
     { 
      Debug.WriteLine("Found table!"); 
      var value = tb.Text; 
      TableRow tr = tb.TableRows[0]; 
      Debug.WriteLine(tb.Text);     
      foreach (var elem in tb.Elements) 
      { 
       Debug.WriteLine("Name : {0}, Type : {1}",elem.Name,elem.GetType()); 
       if (elem.GetType().ToString().Equals("WatiN.Core.Link")) 
       { 
        Debug.WriteLine(elem.Text); 
        //elem.Text is current hader; 
       } 
      } 
     } 

и результаты вывода Debug:

Text - Caller GCIText - Caller GCIstyleText - Originator-Default Bearer Apn 
Name : , Type : WatiN.Core.TableBody 
Name : , Type : WatiN.Core.TableRow 
Name : , Type : WatiN.Core.ElementContainer`1[WatiN.Core.Element] 
Name : , Type : WatiN.Core.Link 
Text - Caller GCI 
Name : , Type : WatiN.Core.ElementContainer`1[WatiN.Core.Element] 
Name : , Type : WatiN.Core.Link 
Text - Caller GCIstyle 
Name : , Type : WatiN.Core.ElementContainer`1[WatiN.Core.Element] 
Name : , Type : WatiN.Core.Link 
Text - Originator-Default Bearer Apn 

Я надеюсь, что это было полезно.

+0

Здравствуйте, Zbig K. Спасибо за решение. Он отлично работает при получении строки строки первого строки. Но опять-таки проблема в том, что у нас есть несколько столбцов. Получая текст для строки [0], он просто выводит строку из текста заголовка столбца, конкатенированного разделителем SPACE. Любые предложения по получению текста выбранных заголовков столбцов для первой строки. –

+0

Вы можете попробовать присвоить результат строке и сделать массив, разделив их: string headers = "1 2 3 4 5 6 7"; string [] str = headers.Split (''); а затем foreach –

+0

Хорошее предложение, но проблема в формате строки. Посмотрите, что получается из результата (Caller GCICallee GCIOriginator-Default Bearer ApnOriginator-IMS Dedicated Bearer Apn), и мне нужно, чтобы ([Caller GCI], [Callee GCI], [Originator-Default Bearer Apn], [Originator- IMS Dedicated Bearer Apn]). Так что раскол не помог мне полностью. –