Silk WebDriver を使用して Selenium Java binding コードを作成する 


#はじめに
前回の記事『[Selenium IDE の代わりに Silk WebDriver を使ってみる](https://qiita.com/masayukii/items/fd5f31f0ef1f39e6a900)』では、Silk WebDriver を使用して Selenium スクリプトの記録と再生を試しました。今回は、記録したスクリプトを Java ソースコードにエクスポートして、Eclipse 上から JUnit テストとして実行する方法を紹介します。この記事では、前回の記事の続きを想定していますので、

- Silk WebDriver がインストールされている
- WebDriver 上でスクリプトが記録されている

ことを前提としていますので、[前回の記事](https://qiita.com/masayukii/items/fd5f31f0ef1f39e6a900)を参考にこの状態まで進めてください。

#準備
今回は Eclipse 上で JUnit テストを実行するので、まずは環境を整えます。使用するマシンに JDK がインストールされていることを確認してください。2017 年 12 月現在、Eclipse Oxygen に同梱されている Gradle は、JDK 9 だと問題があるようでプロジェクトが作成できないため、JDK 8 をインストールします。インストールされていない場合は、[ここ](http://www.oracle.com/technetwork/java/javase/downloads/index.html) からダウンロードしてインストールしてください。
つぎに、[Eclipse](https://www.eclipse.org/) のサイトから [PACKAGES] をクリックし、[Eclipse IDE for Java Developers] パッケージをダウンロードし、任意の場所に展開します。展開した eclipse.exe をダブルクリックして Eclipse を起動します。

```:メモ
次のようなエラーで Gradle のビルドが失敗する場合、[Window]>[Preferences] を選択して [Preferences] ダイアログを開き
[Java]>[Installed JREs] で JDK を設定してください。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Could not find tools.jar. Please check that C:\Program Files (x86)\Silk\SilkTest\ng\jre contains a valid
 JDK installation.
```

#Eclipse で Java プロジェクトを作成する
準備が整ったら、Silk WebDriver でエクスポートする Java ファイルを追加するためのプロジェクトを作成しておきます。
Eclipse の [File]>[New]>[Project...] を選択して [New Project] ウィザードを開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/559a10af-9752-d516-d88e-b8337bfeb7b6.png)

この記事では Gradle プロジェクトを使用しますので、[Gradle]>[Gradle Project] を選択して [Next] ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/86e7f86c-82a3-ef2c-0792-864c45adbf8d.png)

[New Gradle Project] 画面で適当なプロジェクト名を指定したら [Finish] ボタンをクリックしてプロジェクトの作成を完了します。

```:メモ
Silk WebDriver で出力されるソース コードのエンコードは UTF-8 です。スクリプトに日本語が含まれている場合は、
プロジェクトのエンコードも UTF-8 に変更してください。また、Gradle に対しても gradle.properties を作成し、
次の行を追加しておくと良いでしょう。

org.gradle.jvmargs=-Dfile.encoding=UTF-8

```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/3e3edb35-952f-201c-bcf7-bb5275888450.png)

作成されたプロジェクトに含まれるサンプル ファイルは削除してしまって構いません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/d767fc35-376d-1933-9806-4aa704ae21dc.png)

次に、Package Explorer から build.gradle ファイルを開き、次の行を追記します。

```
    compile 'org.seleniumhq.selenium:selenium-java:3.+'
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/b891766a-9697-901d-0936-e259beaf7f71.png)

追加したら、ファイルを保存して、コンテキスト メニューから、[Gradle]>[Refresh Gradle Project] を選択してプロジェクトを更新します。Package Explorer の [Project and External Dependencies] に以下のように Selenium Java バインディングに必要なライブラリが追加されています。これで準備ができましたので、Silk WebDriver に戻って、Java コードをエクスポートしましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/8c820d2e-49ee-f67d-be8e-95b7a30f3b8a.png)

#Silk WebDriver から Java コードをエクスポートする
Silk WebDriver でスクリプトをエクスポートするには、ログイン モードで動作させる必要があります。つまり、Micro Focus Build Portal にアカウントを作成する必要があります。
最初の Welcome ダイアログや、ログイン モードでの動作が必要なコマンド (Export や Save など) を実行しようとしたときに表示されるダイアログで、[Don't have an account? Sign up] リンクをクリックすると、ユーザー登録することができます。
記事の手順に従って実行している場合は、Silk WebDriver サイドバーが開き、記録中かと思います。サイドバーの上部にあるブラウザー コンボ ボックスで ![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/6c374aef-6bfd-983d-36ef-ea610a4734cc.png) を、プログラム言語コンボ ボックスで ![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/7bdb58a0-59df-8ac7-f80a-8bc15cad54ab.png) を選択し、その右側にあるハンバーガー アイコン (![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/bfdafc67-fe7d-0f9f-16b6-6375d8184600.png))をクリックして [Export] を選択し、上記ダイアログを開いたら、[Don't have an account? Sign up] リンクをクリックしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/b0f1469f-392e-3aac-3dec-1e0d6b40f592.png)

ユーザー登録ページが表示されますので、必要な情報を入力して、[Register] ボタンをクリックしてください（無料ですのでご安心を）。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/19627c92-d848-7d59-5006-9fe82a9eebbf.png)

登録を終えたら、Silk WebDriver に戻り、先ほどのダイアログで、[Log in] ボタンをクリックしてログイン ダイアログを表示させて、登録時に指定した電子メール アドレスとパスワードを指定してログインします。
ログイン状態になると [Export Test Case] ダイアログが表示されるので、プロジェクトのソース フォルダーを選択して、適切なファイル名を入力したら [保存] ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/8c8e90fd-2db7-c6b9-3728-7fe6ab28ae92.png)

Eclipse に戻ったら、プロジェクトのコンテキスト メニューを開いて [Refresh] を選択します。今追加したファイルが Package Explorer 上に表示されるので、開いて確認してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/34f5850d-9029-47d6-f3c4-ecc929165d13.png)

#Eclipse で Selenium スクリプトを実行する
エクスポートして保存したコードには、3 つのメソッドがあります。

<dl>
<dt>setup</dt>
<dd>クラス内のテスト実行前に実行されるメソッドです (<code>@Before</code> アノテーション)。ドライバーの初期化を行います。ブラウザー
コンボ ボックスで Chrome を選択したので、ChromeDriver を使用するコードが生成されています。</dd>
<dt>myTestCaseName</dt>
<dd>実行するテスト コードです (<code>@Test</code> アノテーション)。記録した Selenium スクリプトの Java コードが生成されています。</dd>
<dt>tearDown</dt>
<dd>クラス内のテスト実行後に実行されるメソッドです (<code>@After</code> アノテーション)。ドライバーの終了処理を行います。</dd>
</dl>

ここまでくれば、あとは通常の JUnit テストの実行と同じです。myTestCaseName テストを実行する場合は、エディターで myTestCaseName にカーソルを移動して、コンテキスト メニューを開き、[Run As]>[JUnit Test] または [Gradle Test] を選択すればテストが実行されます。

#Selenium スクリプトを変更する
最後に、スクリプトを変更してみます。まず、Silk WebDriver でスクリプトを保存しておきましょう。ハンバーガー アイコンから [Save] または [Save As] を選択して [Save Recorded Actions] ダイアログを開きます。ファイルを保存する場所とファイル名を指定して SWD 形式のファイルを保存します。これで、Silk WebDriver を終了しても、開始画面の [Open existing script] や Files リストから、またはサイドバーの [Open] メニュー コマンドを使用して読み込むことで、Silk WebDriver 上で再びスクリプトを編集できるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/b0fc77eb-9156-4404-f5c8-578b89c9e506.png)

スクリプトを変更を試すために、Silk WebDriver を記録モードの状態にします。サイドバーが閉じている場合は、保存した SWD ファイルを開いて、再びサイドバーにスクリプトを表示してください。サイドバーが表示されているが Chrome が開いていない場合は、記録した操作の先頭にある [Get URL 'http://...'] を選択して再生ボタンをクリックしてください。また、記録モードになっていない場合 (ブラウザーの右下にアイコンが表示されていない) は、記録ボタンをクリックしてください。
Silk WebDriver で操作を追加記録すると記録済み操作の最後に追加されます。たとえば、[お得な観光プラン] をチェックすると、次のように「Click 'plan_b'」が追加されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/cedcaec3-ec6b-4d55-465d-dd8a19683c56.png)

この操作は、「Click 'plan_a'」の後に実行したい操作なので、ドラッグ＆ドロップで移動します。移動したら、変更したスクリプトを実行してみましょう。[Recorded Actions] ノードを選択して、再生ボタンをクリックします。期待通り、「お得な観光プラン」がチェックされ予約内容の確認ページが表示されました。ただし、「お得な観光プラン」を選択すると料金が一人 1000 円分追加されるので、検証に失敗します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/cb0b8bc7-5a28-b9e6-5f55-d5df27afbffe.png)

現時点では、Silk WebDriver 上で記録した操作のプロパティーを編集することはできないので、検証を記録しなおす必要があります。ブラウザーの 23500 の箇所にカーソルを移動して Ctrl + Alt キーを押して検証を記録しなおします。古い検証は、操作にカーソルを移動すると右側に表示される削除ボタン (![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/b81d57ed-31ee-1bd2-bca5-6fcafea977d5.png)) をクリックして削除してください。再び [Recorded Actions] を選択して再生ボタンをクリックすれば、今度はすべての操作が問題なく実行されるはずです。
変更が終わったら、メニューから [Save] を選択して変更を保存しておきましょう。
この変更を Java コードに反映させるためには、サイドバーで Ctrl+C を押すか、メニューから [Copy] を選択します。操作がクリップボードにコピーされると、サイドバーの下部に次のようなメッセージが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/197245/89694bc3-f5d5-e29e-a2be-868b00728564.png)

このメッセージが表示されたら、Eclipse に戻り、```myTestCaseName``` のすべてのステートメントを削除し、Ctrl+V を押して新しいステートメントで置き換えます。ファイルを保存したら [Run As]>[JUnit Test] または [Gradle Test] を再度選択してテストを実行してみましょう。
 
#おわりに
以上が、Silk WebDriver を使用した Selenium Java バインディング コードの生成・編集の基本的な手順になります。Silk WebDriver では、Java/JUnit のほかにも、Ruby、Python、JavaScript、C#、VB と各種フレームワークに対応したソースコードをエクスポートできます。ご使用の環境に応じて、プログラム言語を選択してエクスポートしてください。
なお、今回使用したコードは、[GitHub](https://github.com/miwanaga/SWD_Reservation.git) 上からもアクセスできますので、ご利用ください。