
Katalon Studioは、2025年に誰もが話題にするツールではありません。しかし、エンタープライズのQA自動化を行っている場合、5つの異なるライブラリを組み合わせる手間を省いてくれます。SeleniumとAppiumをラップし、UI、組み込みキーワード、テスト管理、レポート機能をすぐに利用できます。
このガイドでは、Linuxでの実行、JVMバージョンの問題回避、動的XPathを使用したBootstrap日付ピッカーの自動化について説明します。また、テストデータの処理方法、レポートダッシュボードへの接続方法、そして生のSeleniumよりもKatalonが実際に理にかなっているケースについても紹介します。
製品を検索し、実行時に渡されるXPath変数を使用してターゲットの日付を選択します。最終的には、文字列連結や脆いセレクタなしで任意の日付を処理するスクリプトが完成します。
正直な答え:Katalonはラッパーであり、ラッパーにはトレードオフがあります。
Katalonを使うべきケース:
生のSeleniumにこだわるべきケース:
Katalonはオーバーヘッドを追加します。400MBのダウンロード、JVM、そして独自のプロジェクト形式です。その見返りとして、必要なチームにとってはフレームワークのボイラープレートを大幅に削減できます。
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パスに指定してください。
私も最初にこのエラーに遭遇しました。ダウンロードが破損していると思って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の問題は解決です。
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'] |
${year}構文を使用すると、スクリプトから変数を実行時にロケーターに直接渡すことができます。ロケーターテンプレートはオブジェクトリポジトリにあり、データはテストスクリプトにあります。データを変更すると、ロケーターが自動的に適応します。
完全なスクリプトは次のとおりです。
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つの変数を変更するだけです。それだけです。
ターゲットの年が表示されない場合は、ピッカーを操作する必要があります。
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'))
}
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 → 列yeartargetMonth → 列monthtargetDay → 列dayproductName → 列productKatalonは、データ行ごとにテストを自動的に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)
実行後、KatalonはReports/にレポートを生成します。HTMLレポートには以下が含まれます。
テストエクスプローラーで任意のテスト実行を右クリックし、「実行レポートを表示」を選択します。
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は基本的な使用は無料ですが、TestOps(クラウド実行、高度なレポート、AI機能)には有料プランが必要です。これらの機能が必要になった場合は、以下と比較検討してください。
Katalonの最適な利用シーンは、Web、モバイル、APIテストを単一のツールでカバーし、重いフレームワークへの投資なしで済ませたいチームです。QAチームがコードを書くことに慣れてきたら、Playwrightに移行することで、より多くの制御と大幅に優れたパフォーマンスが得られます。
Katalon Studioは、開発者コミュニティで人気を博すことはないでしょう。しかし、Web、モバイル、API、デスクトップをカバーする単一のツールを必要とし、非開発者でも使えるUIを備えたチームにとっては、その価値を発揮します。
動的XPathアプローチにより、日付ピッカーは面倒なものではなく、簡単なものになります。データバインディングにより、テストのパラメーター化はフレームワークの作業ではなく、ポイントアンドクリック操作になります。そして、コンソールモードにより、CI連携は簡単になります。
TutorialsNinjaデモサイトで試してみてください。いくつか日付を選択し、変数がどのように流れるかを確認してください。そして、トレードオフがチームのニーズに合っているかどうかを判断してください。
QAチームは、新しいエンタープライズプロジェクト向けの自動化ツールを評価しています。チームは経験豊富な開発者と、コーディング経験が限られている手動テスターで構成されています。プロジェクトでは、広範なレポート作成、Jiraとの統合、およびWeb、モバイル、APIエンドポイントのテストが必要です。これらの要件を考慮すると、どのツールが最も適切であり、その理由はなぜですか?
AI CLIログの整形、Cron式の作成、JWTの解析、chmod権限の計算をオフラインで実行。

従来のend-to-endアサーションでは見落とされがちなビジュアルレイアウトのリグレッションを、自動ビジュアルテストサービスがCIパイプラインでレスポンシブUIを保護する方法について解説します。
続きを読む
TailwindCSSv4は、パフォーマンスの大幅な向上、新しいエンジン、ゼロコンフィギュレーション設定をもたらします。新機能を探り、既存プロジェクトの移行方法を学びましょう。
続きを読む
曇りガラスUIは至る所にあります。backdrop-filterがGPU compositingをどのように活用するのか、モバイルSafariの癖を回避する方法、そしてアクセシブルなTailwindガラスデザインを作成する方法を学びましょう。
続きを読む