Working with Tables using the Selenium WebDriver and Katalon Studio

While Katalon is capable of reading a table through an object declaration, it’s possible to do the same using the “Webdriver”, “List” and “findElement” commands. I use this method to count the number of rows in a dynamically generated table. It would be equivalent to the storeXPathCount from the Selenium IDE.

Many of the tables I work with are static, meaning the number of rows doesn’t change. For example, we have a table for months, that’s always 12. We have a table for categories, that’s always 10. However, we have a table for customers, and that’s always different.

I have a couple of tests where I need to know the number of customers in that table. To find out, I use the Webdriver to create a List of table rows, then get the Size of that List.

I’ve also used this method when working with Contacts. We don’t display a count for the number of Contacts, but I can use the WebDriver to get a count of the objects I’m interested in, make a new one, then count them again to make sure it’s increased by one.

These commands come from standard Selenium and can be found in many useful examples. To get started we need a few new import statements.

import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
import org.openqa.selenium.By as By
import org.openqa.selenium.WebElement as WebElement
import com.kms.katalon.core.annotation.Keyword as Keyword

Additional statements for logging would be:

import com.kms.katalon.core.logging.KeywordLogger as KeywordLogger

KeywordLogger log = new KeywordLogger()

Once those are declared, define the “Webdriver”

WebDriver driver = DriverFactory.getWebDriver()

With those in place, I can use the following code to count the number of items returned in my List.

WebElement Webtable = driver.findElement(By.id('sales_dash_table')) // Replace TableID with the Actual Table ID or Xpath reference
//Get the number of rows in the table and turn it into a List
List<WebElement> TotalRowCount = Webtable.findElements(By.xpath('//*[@id=\'sales_dash_table\']/tbody/tr'))
//Display the number of rows in the table for the given sales rep
log.logWarning('No. of Rows in the WebTable: ' + TotalRowCount.size())
//Loop through the table and output the information to Log File
//Read columns 1-8, assign each to a variable, then output the result to the Log File
for (int loop = 1; loop <= TotalRowCount.size(); loop++) {
 customerName= driver.findElement(By.xpath("//*[@id='sales_dash_table']/tbody/tr[" + (loop)+ "]/td[1]")).getText();
 log.logWarning('Customer Name:=' + customerName)
 sales = driver.findElement(By.xpath("//*[@id='sales_dash_table']/tbody/tr[" + (loop)+ "]/td[2]")).getText();
 log.logWarning('Sales Figure Amount:=' + sales)
 plan = driver.findElement(By.xpath("//*[@id='sales_dash_table']/tbody/tr[" + (loop)+ "]/td[3]")).getText();
 log.logWarning('Plan Value:=' + plan)
}

In my example, the WebElement is set to the variable WebTable, which corresponds to the ID “sales_dash_table”. The table I’m looking for has an ID of “sales_dash_table” defined within the CSS code. I want to look for that table, then count the number of rows in that table that are returned with the List command.

The By.xpath(“//*[@id=’sales_dash_table’]/tbody/tr” is the actual definition I want to count, in this case, the TR[].

The //* is a wildcard for all the div commands that are in front of the definition.

This is the standard Selenium method for manipulating a table and it works just the same in Katalon. In most cases I’m able to use an object definition, but when the table has an unknown length, it can be easily traversed with the WebDriver.

Other articles of interest:

Leave a Reply

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

Recent Comments
  • How To Disable the Quicken Registration Prompt (24)
    • Joe SR>: My monthly income is deposited into my Credit Union account. I use debit whenever possible. I write checks manually and mail them. I use Quicken 2012 off-line only. I have entered all my money and investment accounts. I...
    • Prtet: Never say never….every time I swear I will never use Quicken again, I discover that there are still no viable alternatives. Amazing that there is no decent personal finance software.
    • Joe D.: Holding CTRL + Shift keys and selecting On Line | One Step Update from the main menu worked for my Quicken 2004. I’m grateful that you wrote a synopsis (“Simply put, …”) just beneath the link to the blog...
    • Susan Long: I bought my quicken disc in the beginning and it came with a registration number. I rang the helpline and they gave me the code to put in and talked me through it. It you downloaded your version then you don’t own it...
    • Peter: You might consider running your old version of Quicken on an ancient computer. This is what I have done for years. The newer versions are fraught with problems- criminal, in my opinion. One version made mathmatical errors when...
    • Roslyn Chamberlain: Can I stop the countdown in quicken 2001 says only 8 sessions left. and what will happen after?
  • Parsing Strings in Katalon – Split, Substring and Readlines (1)
    • Ellen: Thanks for sharing!! I like your contributions to Katalon topics.
  • Working with Dates and Date Formatting in Katalon Studio (6)
    • Ajoo: Thank you for the details. How do i remove leading “0” from dates. i.e. while formatting i receive 04/21/2019, but i need 4/21/2019. (same applies for date)
  • What is Katalon Studio? A Distro of Selenium, Groovy and Eclipse (1)
    • Mahesh: Looking for more posts on katalon studio.your katalon stuffs are always exiting
  • Simple wildcard searches for pattern matching (2)
    • Don Pedro: For that scenario it seems .contains would be your choice. For example, variable.contains(‘amazo n.com’) to see if the url had amazon.com. In that case, www.amazon.com, forum.amazon.com, retail.amazon.com would all...
    • Jony: Hi, How can I use a wild card to assert a URL is the one I want. I just want to verify the domain ==expected but not anything after it. Tried * but not working and only works when I have full URL.
  • Create a Dynamic Object at Runtime (2)
    • Saish: How to add shadow root parent to this runtime object..
    • Jeremy Brien: I appreciate this! I saw this post on LinkedIn this morning and was able to find a use case for it! I found that defining my xpath with an iterable variable allows me to loop through and capture text from tables created...
  • Output status messages and test information by writing to the Log File Viewer in Katalon Studio (2)
    • Don Pedro: That would be things like: log.logWarning(‘The import date listed on the site is: ‘ + importDate) log.logWarning(‘The value from the site is: ‘ + salesFigure) log.logWarning(‘Filter Results for ‘ +...
  • Setting up a repeatable Search Method in Katalon Studio (1)
    • RJ: Thanks a lot! This is very helpful 🙂