はじめに
Seleniumテスト環境について書いた際 テストスクリプトにJavaVm環境で動くスクリプトがよいのではないか?と思ったので、その中から JavaScript言語である Nashornで動くところまで頑張ってみました。
一般的(?)にはJavaScriptを使ってwebdriverを使用するにはまず Node.jsのインストールから始めることになりますが、この方法であれば、Javaがインストールされた環境であれば、すぐに動かすことができます。またJava用に作成されているライブラリーの恩恵を得ることができます。
Nashornとは
これまでのJavaScriptエンジン「Rhino」
Javaは、Java SE 6からJavaScriptをサポートしており、Java SE 7では、Rhino 名前のJavaScriptエンジンが搭載されています。
新JavaScriptエンジン 「Nashorn」
Java 8 からは Nashorn という新しいJavaScriptエンジンが 搭載されています。
Java Platform, Standard Edition Javaスクリプト・プログラマーズ・ガイド
どちらもJavaScriptをJavaで実装しており、使い方としては以下の2パターンがあります。
- Javaソースの中で JavaScriptを使う
コードの基本はJavaで記述し スクリプトエンジンでJavaScriptコードを評価する方式で、コンパイルが必要 - VM上でJavaScriptを実行する
コードはJavaScriptで記述し実行する、コンパイルは不要
- スクリプト言語として使用したいので 2 の方式を調査します。
環境
Javaで実装している実態(?)は 以下にあるファイルになります。
名称 | ディレクトリ |
---|---|
Rhino | JDKの bin ディレクトリにある jrunscript.exe |
nashorn | JREの bin ディレクトリにある jjs.exe |
ちなみに、OSXでもコンソールから jjs と打つとコマンドラインで起動しました。
実行スクリプト
必要なのはパッケージのインポート方法ですが、公式によると 互換性スクリプト(mozilla_compat.js)に組み込まれているとのこと
これを利用して動かしてみます
load("nashorn:mozilla_compat.js");
importPackage(org.openqa.selenium);
importPackage(org.openqa.selenium.firefox);
var driver = new FirefoxDriver();
driver.get("http://www.google.com");
var element = driver.findElementsByName("q");
element.get(0).sendKeys("Cheese!");
element.get(0).submit();
driver.quit();
print("End!");
全部JavaScriptですが、1行目以外は特に目新しいところはないと思います。
### 修正
load importPackageはグローバルオブジェクトを作成してしまうため非推奨とのことでした。
var wd = JavaImporter(org.openqa.selenium.firefox);
var driver = new wd.FirefoxDriver();
driver.get("http://www.google.com");
var element = driver.findElementsByName("q");
element.get(0).sendKeys("Cheese!");
element.get(0).submit();
driver.quit();
print("End!");
実行
JavaVM環境を使用するので クラスパスが通っている必要があります。これが結構曲者だとおもっていますが今回は カレントディレクトリに テストシナリオとドライバーファイルを置いています。
c:\>jjs 1strun.js -cp selenium-server-standalone-2.53.0.jar
おわりに
こんなに簡単に動くのは意外でした。