PhantomJS使ってみた

前回はselenniumだったんですが、今回はphantomjs

phantomjsとは

公式のトップページにはディスプレイ不要のJavascriptAPIを備えたWebkit実行環境。
的な感じで書かれています。

要するにディスプレイ不要でプログラマブルなWebブラウザ。

selenium webdriverを用いることによってブラウザへの操作を、自動化することができましたが、

ブラウザの立ち上げやページレンダリングのコストも馬鹿になりません。
その上、CUIのみの環境でもViewのテストを行いたい、
そんなときにはchromeやfirefoxは使えません。

そこでphantomjsを利用すると、GUI環境がなくてもテストできるよ!
というのがphantomjsの代表的なメリットでしょう。

インストール

これでOK
ただこういうツールは、単純にアプリケーションの依存ライブラリとしてではなく
単体で利用したいシーンも多いと思いますので

としてもよいかもしれません。

※ただそれだとアプリケーション内でphantomjsを利用し、
それを他の環境に持って行くと”phantomjsが見つかりません”といった旨のエラーが出ますので
複数の環境で実行する前提であるアプリケーションでのphantomjsの利用は
ちゃんとpackage.jsonに書いておきましょう。

使い方

phantomjsは、前回の記事で紹介したchromedriverのように
selenium server的にリクエストを待ち受ける使い方と、
それらをラップしてnodeの外部ライブラリとしてAPIを
提供してそれを利用する方法、両方をphantomjs単体でサポートしています。

phantomjs + GhostDriver

(GhostDriverはChromeDriverのphantomjs版と思っていただければ)

これはコマンド一発でとても簡単

これで指定したport numberでリクエストを待ち受けるので、
あとはお好きな言語からselenium webdriverのAPIでリクエストを投げるだけ。
(selenium webdriverのライブラリはどの言語でもphantomjsの
web driverがバンドルされているし特に手間はありません。)

phantomjsのAPIを利用する

こちらは完全にプログラムのみで完結

※ただ、複数ブラウザの挙動の違いとかテストしたいときは、selenium webdriverのAPI経由で
selenium serverを切り替えるほうが、より柔軟なので、こっちをメインで使うことがそんなにあるかな?

簡単にphantomjsのみで、ってことであればこっちで良いと思います。
公式のチュートリアルも(当然だけど)phantomjsだけで完結しています。

※すいません、使い込んだわけではないので、メリットを全て享受できていないと思います。
他にも『こういうときに便利!』なんていうことがあればアドバイスください><

Githubのページを読み込んで、スクリーンショットを撮影。github.pngとして
保存。スクリーンショット取るのがselenium webdriverより簡単なのはいいですね。

このコード(github.jsとする)を

とすると、phantomjsがこれを実行します。
処理が終了するとgithub.pngがカレントディレクトリに保存されていると思います。

selenium単体でこの機能があるのかは、調べきれてないですが、
phantomjsの公式にあったもので、面白かったのが

こんな感じにonResourceRequestedとonResourceReceivedにコールバックを設定しておくと
HTTPリクエストとレスポンスをモニタリングすることができます。

この結果をyslowと連携して結果をjenkinsで見やすく表示する、
という使い方が紹介されていました。公式ページ

これを書いているときに初めてしったんですが、phantomjsのインストールされている
ディレクトリのexamplesには結構実用的なサンプルが多数収録されていますね。
(netsniffって名前はどうなんだろう^^;;)

この節の冒頭に『これ単体で使う意味そんなにある?』みたいなこと言いましたが
結構便利そうですね・・・笑

多分selenium webdriver経由で同じことやろうとすると、
できるだろうけどコード増えそう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です