暇人じゃない

Windows の Selenium Server を Nightwatch.js でテストする
Selenium

Windows 上のブラウザで E2E テストを行うために、Windows で Selenium Server を 動かしておいて、Linux 上の Nightwatch.js からテストしたい。

テストが通るところまでやってみたのでメモ。

Selenium Server のダウンロード/起動

Selenium Server は Windows で動かす。

現時点の最新版である バージョン 2.45selenium-server-standalone-2.45.0.jar をダウンロードした。

  • コマンドプロンプトで以下のように Selenium Server を起動する:
java -jar selenium-server-standalone-2.45.0.jar

実行には JRE が必要なので、入っていなければインストールする。

Nightwatch.js のインストール

Nightwatch.js は Node.js で書いたテストコードを Selenium Server で実行してくれるツール。こちらは Linux で動かす。

npm でインストールする:

npm install nightwatch

nightwatch.json に設定を書く。以下が Selenium Server をテストするのに必要な設定。

{
  "src_folders": ["tests"],
  "output_folder": "reports",
  "selenium": {
    "start_process": false
  },
  "test_settings": {
    "default": {
      "selenium_port": 4444,
      "selenium_host": "192.168.1.23",
      "silent": true,
      "screenshots": {
        "enabled": true,
        "path": "./reports"
      }
    }
  }
}

注意点としては

  • selenium_host, selenium_port 辺りは環境によって変更する。
  • テストでエラーが発生した場合のスクリーンショットの保存先を screenshots で指定しているが、 path は Linux 上のパスを指定する。 上の例ではカレントディレクトリの reports ディレクトリに出力している。

テストコード

Nightwatch.js のプロジェクトページにあるものに少し手を入れた。

tests/google.js:

module.exports = {
  "Demo test Google": function (client) {
    client
      .url("http://www.google.com")
      .waitForElementVisible("body", 1000)
      .assert.title("Google")
      .assert.visible("input[type=text]")
      .setValue("input[type=text]", "rembrandt van rijn")
      .waitForElementVisible("input[name=btnK]", 1000)
      .click("input[name=btnK]")
      .pause(1000)
      .assert.containsText(
        "ol#rso li:first-child",
        "レンブラント・ファン・レイン - Wikipedia"
      )
      .end()
  },
}

テストの実行

Linux から以下のコマンドを実行する:

./bin/nightwatch

Windows 上で Firefox が起動しテストが実行される。

nightwatch.json の silentfalse にすると Nightwatch.js 側の ログが確認できる。

スクリーンショット

スクリーンショットは以下のように取得できる:

client.url("http://www.google.com").saveScreenshot("./screenshot.png")

About

chocoby (GitHub / Twitter)

フリーのソフトウェア開発者です。 Ruby を使った Web 開発を得意としています。