KatalonStudio 動的な値の入力

Groovyスクリプトを使って入力値を動的に変更します。

# ローカルページの作成
複雑な操作をQiitaサイトに行うことは問題があるので、ここからはローカルファイルを使ってテストをしていきます。

以下のindex.htmlを C:/WebSite/index.html に保存しているとします。

```html:index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>TestCase3</title>
</head>
<body>
 <form action="">
     <label for="userid">UserId:</label>
     <input id="userid" name="userid" type="text">
     <br>
     <label for="passcode">Password:</label>
     <input id="passcode" name="passcode" type="password">
     <br>
 </form>
</body>
</html>
```

これをKatalonStudioからテストする場合は、Navigate To Url のパラメータに fileプロトコルを使って場所を指定すれば良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/42df1ff1-41b1-a4c5-c669-3e17d0b8e9d5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/f122906a-089d-7716-a0aa-9c80dd886b03.png)

# テキスト入力
前回の手順を参考に UserId に対する TestObjectを作成します。

UserIdに対応するInputフィールドに値を設定するには Set Text を使います。
Set Text の対象になるObjectをObject Repositoryから選択し、入力したい値をInputのセルに入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/dd253f23-5f5c-1d6f-9e46-9e1ee028d17c.png)

テキスト12345が入力されることを確認するため、再実行を行います。

このとき、HtmlページにTitleタグでタイトルがついていると、すでに起動されたブラウザを指定してテストを実行することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/ec65caa7-4a27-d718-86ed-5f0de50c138b.png)


TestCaseのmanualタブで表示される表では、特定の行からテストを実行することができます。
テストが途中で失敗したとき、その続きから実行したい場合は、該当行を右クリックして Run from here > 対象の起動済みブラウザ を選択することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/85794b8b-4c99-5121-596f-f3eaa9ad43df.png)

「3.Set Text」から実行すると、以下のように 12345 が入力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/6c0cc28d-56b6-7004-ac9d-e9930130df69.png)

# 動的なテキスト値の設定
ある状況の場合だけ、異なるUserIdを入力したいとすると、スクリプトを使用する必要があります。
この処理を追加するため、まず 2行目を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/ef769aab-53fe-c1ea-7842-80e687869e11.png)

次に Addボタンの横にある▼をクリックし、表示されたメニューから Binary Statement をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/a9a9f1ad-7942-f528-235f-db02a13a5b32.png)

これで BinaryStatement が追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/f9081c52-9e8c-0671-4c9b-f2b3aa733cf6.png)

しかし、この画面でスクリプトを編集するのは効率が悪いので、Scriptタブを開いてソースコードを表示します。
すると、いま追加した BinaryStatementが 0==0 として表示されています。
このように Groovyスクリプトを追加すると、Manualタブの画面では BinaryStatementとして表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/8335c9b0-c1c7-79c9-fbc3-029ef15899c3.png)

では、ここに スクリプトを追加してみます。
変数 userId を用意し、いまの時間によって値を変更します。
setTextで設定する値は "12345" から変数 userId に変更します。

```groovy:
WebUI.openBrowser('')

WebUI.navigateToUrl('file:///C:/WebSite/index.html')

def userId = "12345"
def hour = LocalDateTime.now().getHour()
if (hour>12){
	userId="ABCDE"
}

WebUI.setText(findTestObject('input_UserId'), userId)
```

スクリプト入力後、Ctrl+shift+O を押すと、必要なimportだけが残るので、このようなソースコードが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/ef710a05-1943-8339-64e2-ec063619e49c.png)

これを Manualタブで表示すると、このように表示されます。
この構造をGUIで作成するのは非効率なので、Scriptタブを使ったほうが効率が良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/ed17aab4-41f0-9142-9c38-5b031ad86914.png)

このテストを午後に実行すると、このように入力値が変化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270324/8c426599-dc53-be3b-f716-f98668755cc7.png)

# Groovyスクリプトを使う場面
このようにスクリプトで作成した値を設定したり、if文で分岐させることができます。

画面に表示された結果を GetText で取得し、この値を判断して、次の入力値を変更する操作を書くことができます。

複雑なスクリプトを書き出すと、Katalon Studioを使う意味がなさそうに思いますが、テストの実行環境も含めて Katalon Studio だけでテスト作成を進められるので、効率は良いのではないかと思います。

## だんだん不安定になることもある
複雑なケースを作成し、何度も実行していると テストの動作が遅くなり想定外の動作をすることがたまにあります。
この場合は、Katalon Studio を再起動してみると良いです。

Katalon StudioはEclipseベースのアプリケーションなので、インストールフォルダにある katalon.ini を編集し、ヒープサイズを変更することも効果があるかもしれません。