2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

webdriver用のテストシナリオをJavaScript(nashorn)で書いてみる

Last updated at Posted at 2016-05-17

はじめに

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エンジンが 搭載されています。

Nashorn Documentation

Java Platform, Standard Edition Javaスクリプト・プログラマーズ・ガイド

どちらもJavaScriptをJavaで実装しており、使い方としては以下の2パターンがあります。

  1. Javaソースの中で JavaScriptを使う
    コードの基本はJavaで記述し スクリプトエンジンでJavaScriptコードを評価する方式で、コンパイルが必要
  2. VM上でJavaScriptを実行する
     コードはJavaScriptで記述し実行する、コンパイルは不要
  • スクリプト言語として使用したいので 2 の方式を調査します。

環境

Javaで実装している実態(?)は 以下にあるファイルになります。

名称 ディレクトリ
Rhino JDKの bin ディレクトリにある jrunscript.exe
nashorn JREの bin ディレクトリにある jjs.exe

ちなみに、OSXでもコンソールから jjs と打つとコマンドラインで起動しました。

実行スクリプト

必要なのはパッケージのインポート方法ですが、公式によると 互換性スクリプト(mozilla_compat.js)に組み込まれているとのこと

3.2 Javaパッケージおよびクラスのインポート

これを利用して動かしてみます

1strun.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はグローバルオブジェクトを作成してしまうため非推奨とのことでした。

1strun.js
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

おわりに

こんなに簡単に動くのは意外でした。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?