2013-04-11 29 views
2
<table id="tblListViewHeader" class="adminlist" cellspacing="1" cellpadding="0" style="table-layout: fixed; width: 1003px;"> 
<tbody> 
</table> 
</td> 
</tr> 
<tr> 
<td> 
<div id="divListView" style="width: 100%; height: 300px; overflow: auto; display: block;"> 
<table id="tblListView" class="adminlist" cellspacing="1" cellpadding="0" style="table-layout: fixed; width: 100%;"> 
    <tbody data-bind="template: { name: 'ActiveGradeTemplate', foreach: ActiveGrade }"> 
    <tr class="row0"> 
     <td data-bind="text:$index()+1" style="width: 5%;">1</td> 
     <td data-bind="text: GradeName" style="width: 20%;">Vantage Point</td> 
     <td align="right" data-bind="text: DisplayCreatedDate" style="width: 10%;">27 Mar 2013</td> 
     <td align="right" data-bind="text: CreatedByUser" style="width: 10%;">Name</td> 
     <td align="right" data-bind="text: DisplayModifiedDate" style="width: 10%;">27 Mar 2013</td> 
     <td align="right" data-bind="text: ModifiedByUser" style="width: 10%;">Name</td> 
     <td align="center" data-bind="text: Status" style="width: 5%;">Active</td> 
     <td align="center" style="width: 10%;"> 
     <a id="lnkEdit_7" data-bind="click: $root.lnkEdit, attr:{'id':'lnkEdit_' + GradeID}" href="#">Edit</a> 
     <span id="spanEdit_7" data-bind="attr:{'id':'spanEdit_' + GradeID}"></span> 
     </td> 
    </tr> 
    <tr class="row0"> 
    <td data-bind="text:$index()+1" style="width: 5%;">2</td> 
    <td data-bind="text: GradeName" style="width: 20%;">test grade</td> 
    <td align="right" data-bind="text: DisplayCreatedDate" style="width: 10%;">Yesterday</td> 
    <td align="right" data-bind="text: CreatedByUser" style="width: 10%;">Name</td> 
    <td align="right" data-bind="text: DisplayModifiedDate" style="width: 10%;">Yesterday</td> 
    <td align="right" data-bind="text: ModifiedByUser" style="width: 10%;">Name</td> 
    <td align="center" data-bind="text: Status" style="width: 5%;">Active</td> 
    <td align="center" style="width: 10%;"> 
     <a id="lnkEdit_11" data-bind="click: $root.lnkEdit, attr:{'id':'lnkEdit_' + GradeID}" href="#">Edit</a> 
     <span id="spanEdit_11" data-bind="attr:{'id':'spanEdit_' + GradeID}"></span> 
    </td> 
    </tr> 

我怎樣才能檢索td值,每行,這是動態生成。所有的tr類名都是一樣的:<tr class="row0">。如何檢索上述格式化表格的表格數據?動態表中的數據檢索 - 硒的webdriver

回答

0

你有很多選擇,但有我的。 你把所有的tds都放到列表中。

List<WebElement> tdlist = driver.findElements(By.cssSelector("table[id='divListView'] tr td")); 

如果你想要的值,你可以使用循環。

for(WebElement el: tdlist) { 
    Systeme.out.println(el.getText()); 
} 
12

嘗試下面的代碼,這將通過表格和列表迭代過程中打印的所有單元格的數據,

// Grab the table 
WebElement table = driver.findElement(By.id("divListView")); 

// Now get all the TR elements from the table 
List<WebElement> allRows = table.findElements(By.tagName("tr")); 

// And iterate over them, getting the cells 
for (WebElement row : allRows) { 
    List<WebElement> cells = row.findElements(By.tagName("td")); 

    // Print the contents of each cell 
    for (WebElement cell : cells) { 
     System.out.println(cell.getText()); 
    } 
} 
+0

我只想從各行的第2列中獲取數據。我該怎麼做? – 2014-02-13 12:29:26

+0

此方法的工作方式與Jira表一樣。 – 2017-03-16 13:49:28

2
// Grab the table 
    WebElement table = driver.findElement(By.id("table-6")); 

    //Get number of rows in table 
    int numOfRow = table.findElements(By.tagName("tr")).size(); 

    //Get number of columns In table. 
    int numOfCol = driver.findElements(By.xpath("//*[@id='table-6']/tbody/tr[1]/td")).size(); 


    //divided Xpath In three parts to pass Row_count and Col_count values. 
    String first_part = "//*[@id='table-6']/tbody/tr["; 
    String second_part = "]/td["; 
    String third_part = "]"; 

    //take the second column values 
    int j=2; 

    //List to store the second column 
    List<String> secondColumnList=new ArrayList<String>(); 

    //Loop through the rows and get the second column and put it in a list 
    for (int i=1; i<=numOfRow; i++){ 

    //Prepared final xpath of specific cell as per values of i and j. 
     String final_xpath = first_part+i+second_part+j+third_part; 
     //Will retrieve value from located cell and print It. 
     String test_name = driver.findElement(By.xpath(final_xpath)).getText(); 
     secondColumnList.add(test_name); 
     System.out.println(test_name); 

    } 
0

我已經做了使用TestComplete這個代碼和現在硒C#複製它,我認識到這艱辛的道路,但將任何表控制工作,你不必硬編碼任何其中包含xpath元素。另外,如果在td內有一個嵌套表格控件,例如有一個嵌套表格結構,其中的數據解釋如下(當您使用開發人員表達式網格或角度網格控件時,會發生在複雜表格中)。如果您看到這種情況td標籤再次具有嵌套表結構,該結構又具有重複數據。您可以捕獲這些數據,也可以使用下面給出的代碼根據案例進行處理。

的Html

<table> 
<tr> 
    <td>Account # 
     <table> 
     <tr> 
      <td> 
      Account # 
      </td> 
     </tr> 
     </table> 
    </td> 
    <td>Name 
     <table> 
     <tr> 
      <td> 
      Name 
      </td> 
     </tr> 
     </table> 
    </td> 
</tr> 
<tr> 
    <td>1234 
     <table> 
     <tr> 
      <td> 
       1234    
      </td> 
     </tr> 
     </table> 
    </td> 
    <td>Bharat 
     <table> 
     <tr> 
      <td> 
      Bharat    
      </td> 
     </tr> 
     </table> 
    </td> 
</tr> 
</table> 

代碼

public List<TableDataCollection> StoreHtmlTableToList(IWebElement tblObj) 
     { 
      DataTable dataTbl = new DataTable(); 
      int rowIndex = 1; 

      try 
      {    
       _tblDataCollection = new List<TableDataCollection>(); 

       var tblRows = ((IJavaScriptExecutor)DriverContext.Driver).ExecuteScript("return arguments[0].rows; ", tblObj); 

       if (tblRows != null) 
       { 
        //Iterate through each row of the table 
        foreach (IWebElement tr in (IEnumerable)tblRows) 
        {       
         int colIndx = 1; 
         // Iterate through each cell of the table row 
         var tblCols = ((IJavaScriptExecutor)DriverContext.Driver).ExecuteScript("return arguments[0].cells; ", tr); 
         foreach (IWebElement td in (IEnumerable)tblCols) 
         { 

          //loop through any child or nested table structures if you want using the same approach 

          //Write Table to List : This part is not done yet 

          //Print the values 
          Console.WriteLine("Row[" + rowIndex.ToString() + "] Col[" + colIndx.ToString() + "] : " + td.Text); 
          colIndx++; 
         } 
         rowIndex++; 
        } 

       } 


      } 
      catch (Exception) 
      { 
       throw; 
      } 
      return _tblDataCollection; 
     }