Getting Started with Katalon Studio + Automating Bootstrap Date Pickers

Table of Contents(18 sections)
Katalon Studio isn't the tool everyone talks about in 2025. But if you're doing enterprise QA automation, it saves you from stitching together five different libraries. It wraps Selenium and Appium, gives you a UI, built-in keywords, test management, and reporting out of the box.
This guide covers getting it running on Linux, working around a JVM version issue, and automating a Bootstrap date picker with dynamic XPath. I'll also show you how to handle test data, connect it to a reporting dashboard, and when Katalon actually makes sense over raw Selenium.
What to Expect
We'll search for a product and pick a target date using XPath variables passed at runtime. By the end you'll have a script that handles arbitrary dates without string concatenation or brittle selectors.
Why Katalon Instead of Selenium Directly?
The honest answer: Katalon is a wrapper, and wrappers have tradeoffs.
Use Katalon when:
- Your team includes non-developers who need to record and run tests
- You need built-in test management, execution reports, and Jira integration without setting up a separate tool
- You're targeting web, mobile, desktop, and API tests from the same framework
- You need a free alternative to UFT/QTP with a UI
Stick to raw Selenium when:
- Your team is all developers comfortable in code
- You want maximum control over the framework
- You're already invested in Playwright or Cypress, which have better modern browser support
- You need to run inside a monorepo CI pipeline without a GUI
Katalon adds overhead: a 400MB download, a JVM, and a proprietary project format. The payoff is a significant reduction in framework boilerplate for teams that need it.
1. Setting Up Katalon Studio on Linux
Download the Archive
Download the latest Katalon Studio Enterprise for Linux using wget:
wget https://download.katalon.com/10.3.2/Katalon_Studio_Enterprise_Linux_64-10.3.2.tar.gz
tar -xvzf Katalon_Studio_Enterprise_Linux_64-10.3.2.tar.gz
cd Katalon_Studio_Enterprise_Linux_64-10.3.2
Check the Katalon releases page for the current version number before downloading.
Launch It
Run the executable script:
./katalon
Did it crash immediately?
If you see Error: Could not create the Java Virtual Machine., your Java version is too old. Katalon 10.x requires Java 17+. Install Java 17 and point your katalon.ini's -vm argument to the new Java path.
Fixing the JVM Version Mismatch
I hit this exact error the first time. Spent twenty minutes thinking my download was corrupt. It wasn't - my system had Java 11, and Katalon 10.x needs Java 17 minimum.
Step 1: Install Java 17
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-17-jdk
# Verify
java -version
# openjdk version "17.0.x"
# Find the actual path
which java
# /usr/bin/java -> /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
Step 2: Update katalon.ini
Open katalon.ini in the extracted directory:
-startup
../plugins/org.eclipse.equinox.launcher_1.6.x.jar
--launcher.library
../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.2.x/
-vm
/usr/lib/jvm/java-17-openjdk-amd64/bin/java <-- add this line
-vmargs
-Xms256m
-Xmx2048m
The -vm argument must point to the java binary directly, not a symlink, and it must appear before -vmargs.
Step 3: Launch again
./katalon
If it opens the license activation screen, you're past the JVM issue.
2. Automating the Date Picker
Let's automate the HP LP3065 page from the TutorialsNinja demo site and select 04/Jan/2021.
Why Date Pickers Are Tricky
Bootstrap date pickers don't use native <input type="date"> elements - they're custom JS widgets rendered as a calendar grid. Selenium can't just sendKeys a date string. You have to click through the UI.
The naive approach hardcodes the target year and month as text in your XPath:
//span[text()='2021'] # breaks for 2022
//td[@class='day' and text()='4'] # matches wrong month
The better approach uses parameterized XPath with variables passed at runtime.
Object Repository Setup
Skip the hardcoded locators. Set up your objects in Katalon with dynamic XPath locators:
| Object Name | XPath Locator |
|---|---|
input_Search | //input[@name='search'] |
button_Search | //button[contains(@class,'btn-default') and @type='submit'] |
picker_Year | //span[text()='${year}'] |
picker_Month | //span[text()='${month}'] |
picker_Day | //td[@class='day' and text()='${day}'] |
btn_PreviousYear | //th[@class='prev'] |
btn_NextYear | //th[@class='next'] |
Why Dynamic XPath?
The ${year} syntax lets you pass variables from your script directly into the locator at runtime. The locator template lives in the Object Repository; the data lives in your test script. Change the data, the locator adapts automatically.
The Groovy Script
Here's the full script:
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
// Test data - change these three variables to test any date
def targetYear = '2021'
def targetMonth = 'Jan'
def targetDay = '4'
WebUI.openBrowser('http://tutorialsninja.com/demo/')
WebUI.setText(findTestObject('Page_Home/input_Search'), 'HP LP3065')
WebUI.click(findTestObject('Page_Home/button_Search'))
// Wait for product page to load
WebUI.waitForElementVisible(findTestObject('Page_Product/picker_Year', [('year') : targetYear]), 5)
// Pick the date
WebUI.click(findTestObject('Page_Product/picker_Year', [('year') : targetYear]))
WebUI.click(findTestObject('Page_Product/picker_Month', [('month') : targetMonth]))
WebUI.click(findTestObject('Page_Product/picker_Day', [('day') : targetDay]))
The key: ${year}, ${month}, ${day} in the XPath are replaced with the map values you pass to findTestObject. No string concatenation. No brittle selectors.
Want to pick a different date? Change three variables at the top. That's it.
3. Handling Edge Cases
Year Not Visible | Navigate Back
If your target year isn't visible, you need to navigate the picker:
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import com.kms.katalon.core.model.FailureHandling
def targetYear = '2019'
def targetMonth = 'Jan'
def targetDay = '4'
// Navigate to target year (click "previous" until the year appears)
def maxClicks = 10
def clickCount = 0
while (clickCount < maxClicks) {
def yearElement = WebUI.findWebElement(
findTestObject('Page_Product/picker_Year', [('year') : targetYear]),
2,
FailureHandling.OPTIONAL
)
if (yearElement != null) {
WebUI.click(yearElement)
break
}
WebUI.click(findTestObject('Page_Product/btn_PreviousYear'))
clickCount++
}
if (clickCount >= maxClicks) {
WebUI.comment("Warning: Could not navigate to year ${targetYear} in ${maxClicks} clicks")
WebUI.takeScreenshot()
}
FailureHandling.OPTIONAL prevents the test from failing when the element isn't found - it returns null instead. The while loop clicks "previous" until the year appears or the click limit is reached. Add screenshot capture for debugging when it fails.
Month Rollover
The same pattern works for months:
def targetMonth = 'Mar'
while (true) {
def monthElement = WebUI.findWebElement(
findTestObject('Page_Product/picker_Month', [('month') : targetMonth]),
1,
FailureHandling.OPTIONAL
)
if (monthElement != null) {
WebUI.click(monthElement)
break
}
WebUI.click(findTestObject('Page_Product/btn_NextMonth'))
}
4. Data-Driven Testing with Test Cases
One of Katalon's genuine strengths over raw Selenium: built-in data binding. Define your test data in a Data File (CSV or Excel) and bind it to your test case - no framework code needed.
Create a Data File (Katalon → New → Test Data):
year,month,day,product
2021,Jan,4,HP LP3065
2022,Mar,15,Canon EOS
2023,Jun,1,Samsung TV
Bind the data in Test Case view:
In the Test Suite, set Data Binding for your test case:
- Variable
targetYear→ columnyear - Variable
targetMonth→ columnmonth - Variable
targetDay→ columnday - Variable
productName→ columnproduct
Katalon runs the test once per data row automatically. No loops in your code.
Access bound variables in the script:
// Variables injected from the data file
def targetYear = year // from binding
def targetMonth = month
def targetDay = day
def productName = productName
WebUI.setText(findTestObject('Page_Home/input_Search'), productName)
5. Reporting and CI Integration
Viewing Reports Locally
After every run, Katalon generates reports in Reports/. The HTML report includes:
- Pass/fail per step
- Screenshots on failure
- Elapsed time per step
- Browser/OS info
Right-click any test run in the Tests Explorer → View Execution Report.
Running in CI (Headless)
For CI pipelines, run Katalon in console mode:
./katalon \
-noSplash \
-runMode=console \
-projectPath="$(pwd)/MyProject.prj" \
-testSuitePath="Test Suites/Regression" \
-browserType="Chrome (headless)" \
-reportFolder="$(pwd)/reports" \
-reportFileName="ci-run" \
-apiKey="$KATALON_API_KEY"
For GitHub Actions:
name: Katalon Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Java 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Install Chrome
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update && sudo apt-get install -y google-chrome-stable
- name: Run Tests
run: |
./katalon -noSplash -runMode=console \
-projectPath="$GITHUB_WORKSPACE/MyProject.prj" \
-testSuitePath="Test Suites/CI" \
-browserType="Chrome (headless)" \
-reportFolder="reports" \
-apiKey="${{ secrets.KATALON_API_KEY }}"
- name: Upload Test Report
if: always()
uses: actions/upload-artifact@v4
with:
name: katalon-report
path: reports/
When to Move Off Katalon
Katalon is free for basic usage, but TestOps (cloud execution, advanced reporting, AI features) requires a paid plan. If you find yourself needing those features, compare against:
- Playwright: better for modern web, faster, open source, excellent TypeScript support
- Selenium Grid: raw Selenium with parallel execution if you're already invested
- Cypress: excellent DX for frontend-heavy apps, though limited to browser tests
The Katalon sweet spot is teams that need a single tool covering web, mobile, and API testing without heavy framework investment. Once your QA team is comfortable writing code, moving to Playwright gives you more control and significantly better performance.
Final Thoughts
Katalon Studio won't win any popularity contests in the developer community. But for teams that need a single tool covering web, mobile, API, and desktop - with a UI that non-coders can use - it delivers.
The dynamic XPath approach makes date pickers trivial instead of painful. The data binding makes parametrizing tests a point-and-click operation instead of a framework exercise. And console mode makes CI integration straightforward.
Try it on the TutorialsNinja demo site. Pick a few dates. See how the variables flow through. Then decide if the tradeoffs fit your team's needs.
You Might Also Like
- Custom Playwright Reporter Dashboard
- Color Palettes I Actually Use Instead of Tailwind's Defaults
- Tailwind CSS v4: What's New and How to Migrate
- CSS Container Queries (@container): Component-Aware CSS in 2026
Test Your Knowledge
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Automated Visual Regression Testing Services in 2026
Why traditional end-to-end assertions miss visual layout regressions, and how automated visual testing services protect responsive UI in CI pipelines.
Read more
Modern CSS Animations: High-Performance GPU Transitions
Learn how to master css hardware accelerated animations, the difference between css transform vs opacity, and when to use css spring animations.
Read more
CSS Container Queries (@container): Component-Aware CSS in 2026
@container queries let components react to their parent size, not the viewport. 100% browser support in 2026 - ditch @media for layout, use @container.
Read more