Site Loader
Auckland, New Zealand
There are many situations where we might need to verify all the columns and rows of one or more table in a page against Database table to check its data. This can be done if we store all the UI table rows and columns in List<> and then compare it with any data source. This is a very time consuming process for Coded UI Test if we write the code with the built-in function provided by Microsoft. All we do while writing code is this.
  • First get the number of rows
  • Next get the number of columns
  • Iterate through the rows and columns
  • Using GetCell method, get the value of the cell
public static void UITableToArray(HtmlTable table)

{

//Declare List<> or Dictionary

try

{

int rowCount = table.RowCount;

int colCount = table.ColumnCount;

for (int rowIndex = 1; rowIndex < rowCount; rowIndex ++)

{

for (int colIndex = 1; colIndex < colCount; colIndex ++)

{

if (table.GetCell(row, col).InnerText != null)

{

//Store in list or dictionary

}

}

}

}

catch (Exception e)

{

}

}
But the problem is, the code is very slow. If you would like to read a table in page with 100 rows and 25 columns, then it will take you more than 20 minutes to read all the data!!! Believe me, it’s true fact. The reason is this The GetCell method, the method is slow because every time it does the following
  • Identifies the page
  • Identifies the table
  • Identifies the Row and its column with index supplied
  • Then reads the data
The process is fast if we read only one data, but what happen if we want to read hundreds of data, the above will surely very slow. So, whats the solution? The solution is explained with little flowchart diagram as shown below flowchart   As you could see above, the table is identified ONLY ONCE and so is the row collection, which means all the rows and its related values are found in just one single shot, which is awesome. This will eradicate the above problem faced by GetCell() method which we were discussing about earlier. As you could see, the code will now look like one shown below.  
public static void UITableToArrayList(HtmlTable table)

{

//Declare List<> or Dictionary

try

{

UITestControlCollection rowcontrol = table.Rows;

string cellval = null;

int rowcount = 0;


//col Names

string[] colNames = table.GetColumnNames();

foreach (UITestControl item in rowcontrol)

{

int colCount = 0;

if (item is HtmlRow)

{

rowcount++;

foreach (HtmlControl cell in item.GetChildren())

{

cellval = cell.InnerText;

if (colNames[colCount] != null)

{

//Store it in List or Dictionary

}

colCount++;

}

}

}

}

catch (Exception e)

{

 

}

}

The above code takes only 5 seconds to read complete table of UI and store in List<> I hope this might have given you all an insight of how we can read all the rows and columns of table in single shot. Thanks, Karthik KK

Post Author: Karthik kk

5 Replies to “Store all rows and columns of Web table in List using Coded UI Test (For performance improvement)”

  1. I agree with your post, the Introduction of automation testing product shortens the development life cycle. It helps the software developers and programmers to validate software application performance and behavior before deployment. You can choose testing product based on your testing requirements and functionality.

  2. Clearly explained to rectify problems using GetCell() method.Keep sharing such type of useful information

  3. I wish to indicate because of you only to bail me out of this specific trouble. As a consequence of checking through the net and meeting systems that were not beneficial, I thought my life was finished.

  4. I just needed to record a speedy word to express profound gratitude to you for those magnificent tips and clues you are appearing on this site.

Leave a Reply to shivu Cancel reply

Your email address will not be published. Required fields are marked *