KatalonStudio入門+BootstrapDatepickerの自動化

Table of Contents
Katalon Studioは、2025年に誰もが話題にするツールではありません。しかし、エンタープライズのQA自動化を行っている場合、5つの異なるライブラリを組み合わせる手間を省いてくれます。SeleniumとAppiumをラップし、UI、組み込みキーワード、テスト管理、レポート機能をすぐに利用できます。
このガイドでは、Linuxでの実行、JVMバージョンの問題回避、動的XPathを使用したBootstrap日付ピッカーの自動化について説明します。また、テストデータの処理方法、レポートダッシュボードへの接続方法、そして生のSeleniumよりもKatalonが実際に理にかなっているケースについても紹介します。
期待できること
製品を検索し、実行時に渡されるXPath変数を使用してターゲットの日付を選択します。最終的には、文字列連結や脆いセレクタなしで任意の日付を処理するスクリプトが完成します。
Seleniumを直接使う代わりにKatalonを使う理由
正直な答え:Katalonはラッパーであり、ラッパーにはトレードオフがあります。
Katalonを使うべきケース:
- チームに、テストの記録と実行が必要な非開発者がいる場合
- 別途ツールを設定することなく、組み込みのテスト管理、実行レポート、Jira連携が必要な場合
- 同じフレームワークからWeb、モバイル、デスクトップ、APIテストを対象とする場合
- UIを備えたUFT/QTPの無料代替品が必要な場合
生のSeleniumにこだわるべきケース:
- チーム全員がコードに慣れている開発者である場合
- フレームワークを最大限に制御したい場合
- すでにPlaywrightやCypressに投資しており、これらはより優れたモダンブラウザサポートを提供している場合
- GUIなしでモノレポCIパイプライン内で実行する必要がある場合
Katalonはオーバーヘッドを追加します。400MBのダウンロード、JVM、そして独自のプロジェクト形式です。その見返りとして、必要なチームにとってはフレームワークのボイラープレートを大幅に削減できます。
1. LinuxでのKatalon Studioのセットアップ
アーカイブのダウンロード
wgetを使用して、Linux用の最新のKatalon Studio Enterpriseをダウンロードします。
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
ダウンロードする前に、Katalonリリースぺージで現在のバージョン番号を確認してください。
起動
実行可能スクリプトを実行します。
./katalon
すぐにクラッシュしましたか?
Error: Could not create the Java Virtual Machine.が表示された場合、Javaのバージョンが古すぎます。 Katalon 10.xにはJava 17以降が必要です。Java 17をインストールし、katalon.iniの-vm引数を新しいJavaパスに指定してください。
JVMバージョンミスマッチの修正
私も最初にこのエラーに遭遇しました。ダウンロードが破損していると思って20分も費やしました。そうではなく、私のシステムにはJava 11があり、Katalon 10.xには最低でもJava 17が必要だったのです。
ステップ1: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
ステップ2:katalon.iniの更新
展開したディレクトリ内のkatalon.iniを開きます。
-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
-vm引数は、シンボリックリンクではなく、javaバイナリを直接指す必要があり、-vmargsの前に記述する必要があります。
ステップ3:再度起動
./katalon
ライセンス認証画面が開けば、JVMの問題は解決です。
2. 日付ピッカーの自動化
TutorialsNinjaデモサイトのHP LP3065ページを自動化し、04/Jan/2021を選択してみましょう。
日付ピッカーが厄介な理由
Bootstrapの日付ピッカーは、ネイティブの<input type="date">要素を使用せず、カレンダーグリッドとしてレンダリングされるカスタムJSウィジェットです。Seleniumは日付文字列をsendKeysするだけでは済みません。UIをクリックして操作する必要があります。
素朴なアプローチでは、ターゲットの年と月をXPathにテキストとしてハードコードします。
//span[text()='2021'] # breaks for 2022
//td[@class='day' and text()='4'] # matches wrong month
より良いアプローチは、実行時に変数を渡すパラメーター化されたXPathを使用することです。
オブジェクトリポジトリのセットアップ
ハードコードされたロケーターはスキップしましょう。Katalonで動的XPathロケーターを使用してオブジェクトを設定します。
| オブジェクト名 | 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'] |
なぜ動的XPathなのか?
${year}構文を使用すると、スクリプトから変数を実行時にロケーターに直接渡すことができます。ロケーターテンプレートはオブジェクトリポジトリにあり、データはテストスクリプトにあります。データを変更すると、ロケーターが自動的に適応します。
Groovyスクリプト
完全なスクリプトは次のとおりです。
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]))
重要なのは、XPath内の${year}、${month}、${day}が、findTestObjectに渡すマップ値に置き換えられることです。文字列連結も、脆いセレクタもありません。
別の日付を選択したいですか?上部の3つの変数を変更するだけです。それだけです。
3. エッジケースの処理
年が表示されない場合 — 戻る操作
ターゲットの年が表示されない場合は、ピッカーを操作する必要があります。
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は、要素が見つからない場合にテストが失敗するのを防ぎ、代わりにnullを返します。whileループは、年が表示されるかクリック制限に達するまで「前へ」をクリックします。失敗時にデバッグのためにスクリーンショットキャプチャを追加してください。
月の繰り越し
同じパターンが月にも適用されます。
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. テストケースによるデータ駆動型テスト
Katalonが生のSeleniumよりも優れている真の強みの一つは、組み込みのデータバインディングです。テストデータをデータファイル(CSVまたはExcel)で定義し、それをテストケースにバインドします。フレームワークコードは必要ありません。
データファイルの作成(Katalon → 新規 → テストデータ):
year,month,day,product
2021,Jan,4,HP LP3065
2022,Mar,15,Canon EOS
2023,Jun,1,Samsung TV
テストケースビューでのデータのバインド:
テストスイートで、テストケースのデータバインディングを設定します。
- 変数
targetYear→ 列year - 変数
targetMonth→ 列month - 変数
targetDay→ 列day - 変数
productName→ 列product
Katalonは、データ行ごとにテストを自動的に1回実行します。コードにループは必要ありません。
スクリプトでのバインドされた変数へのアクセス:
// 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. レポートとCI連携
ローカルでのレポート表示
実行後、KatalonはReports/にレポートを生成します。HTMLレポートには以下が含まれます。
- ステップごとの合否
- 失敗時のスクリーンショット
- ステップごとの経過時間
- ブラウザ/OS情報
テストエクスプローラーで任意のテスト実行を右クリックし、「実行レポートを表示」を選択します。
CIでの実行(ヘッドレス)
CIパイプラインでは、Katalonをコンソールモードで実行します。
./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"
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/
Katalonからの移行時期
Katalonは基本的な使用は無料ですが、TestOps(クラウド実行、高度なレポート、AI機能)には有料プランが必要です。これらの機能が必要になった場合は、以下と比較検討してください。
- Playwright — モダンWebに優れ、高速でオープンソース、優れたTypeScriptサポート
- Selenium Grid — すでに投資している場合は、並列実行を備えた生のSelenium
- Cypress — フロントエンド中心のアプリに優れたDXを提供しますが、ブラウザテストに限定されます
Katalonの最適な利用シーンは、Web、モバイル、APIテストを単一のツールでカバーし、重いフレームワークへの投資なしで済ませたいチームです。QAチームがコードを書くことに慣れてきたら、Playwrightに移行することで、より多くの制御と大幅に優れたパフォーマンスが得られます。
最後に
Katalon Studioは、開発者コミュニティで人気を博すことはないでしょう。しかし、Web、モバイル、API、デスクトップをカバーする単一のツールを必要とし、非開発者でも使えるUIを備えたチームにとっては、その価値を発揮します。
動的XPathアプローチにより、日付ピッカーは面倒なものではなく、簡単なものになります。データバインディングにより、テストのパラメーター化はフレームワークの作業ではなく、ポイントアンドクリック操作になります。そして、コンソールモードにより、CI連携は簡単になります。
TutorialsNinjaデモサイトで試してみてください。いくつか日付を選択し、変数がどのように流れるかを確認してください。そして、トレードオフがチームのニーズに合っているかどうかを判断してください。
こちらもどうぞ
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

PlaywrightによるE2Eテスト習得2026年版
Playwrightのauto-waiting、browser context isolation、network interception、auth storage、CI parallelizationを活用し、E2Eテストを習得するためのガイドです。
Read more
Pytestの高度なfixtureとパラメータ化パターン
pytestのfixtureスコープ、間接的なパラメータ化、動的ジェネレータフック、堅牢なクリーンアップライフサイクルパターンを活用して、クリーンなテストスイートを設計しましょう。
Read more
2026年における自動ビジュアルリグレッションテストサービス
従来のend-to-endアサーションでは見落とされがちなビジュアルレイアウトのリグレッションを、自動ビジュアルテストサービスがCIパイプラインでレスポンシブUIを保護する方法について解説します。
Read more