Bắt đầu với Katalon Studio + Tự động hóa Bootstrap Date Picker

Table of Contents
Katalon Studio không phải là công cụ mà mọi người nói đến vào năm 2025. Nhưng nếu bạn đang thực hiện tự động hóa QA cấp doanh nghiệp, nó sẽ giúp bạn không phải kết nối năm thư viện khác nhau. Nó bao bọc Selenium và Appium, cung cấp cho bạn giao diện người dùng, các từ khóa tích hợp, quản lý kiểm thử và báo cáo sẵn có.
Hướng dẫn này bao gồm việc chạy nó trên Linux, khắc phục sự cố phiên bản JVM và tự động hóa bộ chọn ngày Bootstrap bằng XPath động. Tôi cũng sẽ chỉ cho bạn cách xử lý dữ liệu kiểm thử, kết nối nó với bảng điều khiển báo cáo và khi nào Katalon thực sự có ý nghĩa hơn Selenium thô.
Những gì mong đợi
Chúng ta sẽ tìm kiếm một sản phẩm và chọn một ngày mục tiêu bằng cách sử dụng các biến XPath được truyền vào thời gian chạy. Cuối cùng, bạn sẽ có một tập lệnh xử lý các ngày tùy ý mà không cần nối chuỗi hoặc bộ chọn dễ vỡ.
Tại sao lại là Katalon thay vì Selenium trực tiếp?
Câu trả lời trung thực: Katalon là một trình bao bọc, và các trình bao bọc có những đánh đổi.
Sử dụng Katalon khi:
- Nhóm của bạn bao gồm những người không phải nhà phát triển cần ghi lại và chạy thử nghiệm
- Bạn cần quản lý kiểm thử tích hợp, báo cáo thực thi và tích hợp Jira mà không cần thiết lập một công cụ riêng biệt
- Bạn đang nhắm mục tiêu kiểm thử web, di động, máy tính để bàn và API từ cùng một framework
- Bạn cần một giải pháp thay thế miễn phí cho UFT/QTP có giao diện người dùng
Sử dụng Selenium thô khi:
- Nhóm của bạn toàn là nhà phát triển thoải mái với mã
- Bạn muốn kiểm soát tối đa framework
- Bạn đã đầu tư vào Playwright hoặc Cypress, những công cụ này hỗ trợ trình duyệt hiện đại tốt hơn
- Bạn cần chạy bên trong pipeline CI monorepo mà không có GUI
Katalon bổ sung thêm chi phí: tải xuống 400MB, JVM và định dạng dự án độc quyền. Lợi ích là giảm đáng kể mã boilerplate của framework cho các nhóm cần nó.
1. Thiết lập Katalon Studio trên Linux
Tải xuống kho lưu trữ
Tải xuống Katalon Studio Enterprise mới nhất cho Linux bằng cách sử dụng 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
Kiểm tra trang phát hành Katalon để biết số phiên bản hiện tại trước khi tải xuống.
Khởi chạy nó
Chạy tập lệnh thực thi:
./katalon
Nó bị lỗi ngay lập tức?
Nếu bạn thấy Error: Could not create the Java Virtual Machine., phiên bản Java của bạn quá cũ. Katalon 10.x yêu cầu Java 17+. Cài đặt Java 17 và trỏ đối số -vm của katalon.ini đến đường dẫn Java mới.
Khắc phục lỗi không khớp phiên bản JVM
Tôi đã gặp chính xác lỗi này lần đầu tiên. Mất hai mươi phút để nghĩ rằng bản tải xuống của tôi bị hỏng. Không phải vậy — hệ thống của tôi có Java 11, và Katalon 10.x cần Java 17 tối thiểu.
Bước 1: Cài đặt 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
Bước 2: Cập nhật katalon.ini
Mở katalon.ini trong thư mục đã giải nén:
-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
Đối số -vm phải trỏ trực tiếp đến tệp nhị phân java, không phải một symlink, và nó phải xuất hiện trước -vmargs.
Bước 3: Khởi chạy lại
./katalon
Nếu nó mở màn hình kích hoạt giấy phép, bạn đã vượt qua vấn đề JVM.
2. Tự động hóa Bộ chọn ngày
Hãy tự động hóa trang HP LP3065 từ trang web demo TutorialsNinja và chọn 04/Jan/2021.
Tại sao Bộ chọn ngày lại khó khăn
Bộ chọn ngày Bootstrap không sử dụng các phần tử <input type="date"> gốc — chúng là các widget JS tùy chỉnh được hiển thị dưới dạng lưới lịch. Selenium không thể chỉ sendKeys một chuỗi ngày. Bạn phải nhấp qua giao diện người dùng.
Cách tiếp cận ngây thơ là mã hóa cứng năm và tháng mục tiêu dưới dạng văn bản trong XPath của bạn:
//span[text()='2021'] # breaks for 2022
//td[@class='day' and text()='4'] # matches wrong month
Cách tiếp cận tốt hơn sử dụng XPath tham số hóa với các biến được truyền vào thời gian chạy.
Thiết lập Kho lưu trữ đối tượng
Bỏ qua các bộ định vị được mã hóa cứng. Thiết lập các đối tượng của bạn trong Katalon với các bộ định vị XPath động:
| Tên đối tượng | Bộ định vị XPath |
|---|---|
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'] |
Tại sao lại là XPath động?
Cú pháp ${year} cho phép bạn truyền các biến từ tập lệnh của mình trực tiếp vào bộ định vị tại thời gian chạy. Mẫu bộ định vị nằm trong Kho lưu trữ đối tượng; dữ liệu nằm trong tập lệnh kiểm thử của bạn. Thay đổi dữ liệu, bộ định vị sẽ tự động điều chỉnh.
Tập lệnh Groovy
Đây là tập lệnh đầy đủ:
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]))
Điểm mấu chốt: ${year}, ${month}, ${day} trong XPath được thay thế bằng các giá trị bản đồ bạn truyền cho findTestObject. Không nối chuỗi. Không có bộ chọn dễ vỡ.
Muốn chọn một ngày khác? Thay đổi ba biến ở trên cùng. Chỉ vậy thôi.
3. Xử lý các trường hợp ngoại lệ
Năm không hiển thị — Điều hướng quay lại
Nếu năm mục tiêu của bạn không hiển thị, bạn cần điều hướng bộ chọn:
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 ngăn kiểm thử không bị lỗi khi không tìm thấy phần tử — thay vào đó nó trả về null. Vòng lặp while nhấp vào "trước đó" cho đến khi năm xuất hiện hoặc đạt đến giới hạn nhấp. Thêm chụp ảnh màn hình để gỡ lỗi khi nó bị lỗi.
Chuyển tháng
Mẫu tương tự cũng hoạt động với các tháng:
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. Kiểm thử dựa trên dữ liệu với các trường hợp kiểm thử
Một trong những điểm mạnh thực sự của Katalon so với Selenium thô: liên kết dữ liệu tích hợp. Xác định dữ liệu kiểm thử của bạn trong một Tệp dữ liệu (CSV hoặc Excel) và liên kết nó với trường hợp kiểm thử của bạn — không cần mã framework.
Tạo một Tệp dữ liệu (Katalon → Mới → Dữ liệu kiểm thử):
year,month,day,product
2021,Jan,4,HP LP3065
2022,Mar,15,Canon EOS
2023,Jun,1,Samsung TV
Liên kết dữ liệu trong chế độ xem Trường hợp kiểm thử:
Trong Test Suite, đặt Liên kết dữ liệu cho trường hợp kiểm thử của bạn:
- Biến
targetYear→ cộtyear - Biến
targetMonth→ cộtmonth - Biến
targetDay→ cộtday - Biến
productName→ cộtproduct
Katalon chạy kiểm thử một lần cho mỗi hàng dữ liệu tự động. Không có vòng lặp trong mã của bạn.
Truy cập các biến đã liên kết trong tập lệnh:
// 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. Báo cáo và Tích hợp CI
Xem báo cáo cục bộ
Sau mỗi lần chạy, Katalon tạo báo cáo trong Reports/. Báo cáo HTML bao gồm:
- Đạt/không đạt cho mỗi bước
- Ảnh chụp màn hình khi thất bại
- Thời gian đã trôi qua cho mỗi bước
- Thông tin trình duyệt/Hệ điều hành
Nhấp chuột phải vào bất kỳ lần chạy kiểm thử nào trong Trình khám phá kiểm thử → Xem báo cáo thực thi.
Chạy trong CI (Không giao diện)
Đối với các pipeline CI, chạy Katalon ở chế độ console:
./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"
Đối với 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/
Khi nào nên chuyển khỏi Katalon
Katalon miễn phí cho việc sử dụng cơ bản, nhưng TestOps (thực thi trên đám mây, báo cáo nâng cao, tính năng AI) yêu cầu gói trả phí. Nếu bạn thấy mình cần các tính năng đó, hãy so sánh với:
- Playwright — tốt hơn cho web hiện đại, nhanh hơn, mã nguồn mở, hỗ trợ TypeScript xuất sắc
- Selenium Grid — Selenium thô với thực thi song song nếu bạn đã đầu tư
- Cypress — DX xuất sắc cho các ứng dụng nặng frontend, mặc dù chỉ giới hạn ở các kiểm thử trình duyệt
Điểm mạnh của Katalon là các nhóm cần một công cụ duy nhất bao gồm kiểm thử web, di động và API mà không cần đầu tư nhiều vào framework. Khi nhóm QA của bạn đã quen với việc viết mã, việc chuyển sang Playwright sẽ cho bạn nhiều quyền kiểm soát hơn và hiệu suất tốt hơn đáng kể.
Suy nghĩ cuối cùng
Katalon Studio sẽ không giành được bất kỳ giải thưởng phổ biến nào trong cộng đồng nhà phát triển. Nhưng đối với các nhóm cần một công cụ duy nhất bao gồm web, di động, API và máy tính để bàn — với giao diện người dùng mà những người không phải lập trình viên có thể sử dụng — nó mang lại hiệu quả.
Cách tiếp cận XPath động làm cho bộ chọn ngày trở nên đơn giản thay vì khó khăn. Liên kết dữ liệu làm cho việc tham số hóa các kiểm thử trở thành một thao tác nhấp và chọn thay vì một bài tập framework. Và chế độ console làm cho việc tích hợp CI trở nên đơn giản.
Hãy thử nó trên trang web demo TutorialsNinja. Chọn một vài ngày. Xem cách các biến chảy qua. Sau đó quyết định xem những đánh đổi có phù hợp với nhu cầu của nhóm bạn hay không.
Bạn cũng có thể thích
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Các mẫu Pytest Fixture và Tham số hóa nâng cao
Thiết kế các bộ kiểm thử gọn gàng với phạm vi pytest fixture, tham số hóa gián tiếp, các hook generator động và các mẫu vòng đời dọn dẹp linh hoạt.
Read more
CSS Grid vs Flexbox: Hướng dẫn trực quan tương tác để đưa ra quyết định (2026)
Đừng đoán mò nữa. Hãy xem CSS Grid và Flexbox song song với các bản demo tương tác trực tiếp, cây quyết định và các mẫu bố cục thực tế mà bạn có thể chỉnh sửa ngay trong trình duyệt của mình.
Read more
Kiểm thử hợp đồng Microservices với Pact & Node.js
Kiểm thử hợp đồng theo hướng người tiêu dùng với Pact trong các microservice Node.js. Cấu hình Pact Broker, xác minh trạng thái nhà cung cấp và can-i-deploy trong CI/CD.
Read more