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 (31)
    • Juani: Hi, I have a registered Quicken 2016 and now my files are being held hostage by Intuit, cannot log in with my ID unless I upgrade therefore buy a subscription, I need to access my files, please HELP. Thanks
    • David: A BIG Thank you! I regularly reinstall Windows OS’s using different hardware configs. In short, Quicken 2011 (it’s March of 2020 as I write this) has been a program I’ve been very happy with and continue to use....
    • Karen L: Today I rang Reckon Australia again, got a different guy and he talked me through the process of getting me a new product key to enter since I already had the licence and it had been extended. Reckon have only extended it by 1...
    • Karen L: I have Australian Quicken 2008 on Windows 8.1. It keeps asking me to renew my licence which Reckon did for me however the activation won’t work. I tried this to disable the registration prompt however it did not stop the...
  • Building Relationships with Developers (1)
    • Carlos Herrera: Ah yes. I have a team of software developers and it is genuinely so hard to keep them in the loop during projects. Though the more we work the better the communication becomes and we go from a trail and error process to a...
  • Integrating DevonAgent Pro with Alfred (1)
    • J. Garr: Beautiful, sweet, and simple. I love it; thanks for posting this solution.
  • Round and Round with the For..Next in Katalon Studio (1)
    • Sweet Ophaline Labador: Hello can you help me how to loop this scenario. Checking the elements is just the same. I want to check that the following function is available in www.siacargo.com: Track Shipment – clicking on this can...
  • Parsing Strings in Katalon – Split, Substring and Readlines (6)
    • Don Pedro: String tempText=”Date Month January. Revenue $1,355,721.00″ println(tempText.split(“ \$”)[1]) You need to escape the $ with \$ The [1] on the split captures characters on the right of the split [0]...
    • Prasad: Hi, I need to get the substring from the below string ‘Date Month January. Revenue $1,355,721.00’ I want to extract text after $ value. Please help Thank you
  • Working with Dates and Date Formatting in Katalon Studio (15)
    • Sangeethaa: How to get previous day’s date(Yesterday’s date)? Actually I was using today.previous() before,it was working fine till today morning.Now its not retrieving right date. Can anyone please guide me on this.
    • Don Pedro: That could be a little tricky. First, is the text/format always going to be the same? You will need to do some parsing. Separate the first but of text at 2019. After that, split the text again to get rid of Central Standard...
    • Don Pedro: It should be of the same Date type as today. You could then do some calendar trickery with Calendar /*Calendar c = Calendar.getInstance(); //c.set(Calendar.MONTH, 1) //Set the month, 0=January, 11=December println...
    • josh: I’m testing a page with a string like “Updated November 21, 2019 16:25:32 PM Central Standard Time.” How might I capture the date and time and compare it to current time to verify that the update time was within...
  • Output status messages and test information by writing to the Log File Viewer in Katalon Studio (6)
    • Saranya: Good One. Could you plz share link to access all your katalon related blogs. ThankQ
    • Rodrigo Calabretta: I’m using the KeywordUtil.markFailed or KeywordUtil.markError and my test stops is being shown as Error and If I use in the @afterTestCase the testCaseContext.getTestCaseSta tus() to show the status test case...