2016年3月24日木曜日

Capybaraを使ってブラウザ操作を自動化


◆ 目的
モダンでリッチな動的WEBインターフェースをコマンド経由で自動操作する。
(WEBに限らず、GUI画面全般を画像認識技術を使いオートメーション化したい場合はこちら)



◆ 対象
試験対象のWEBをIBMのBluemix管理コンソールとした。
https://console.ng.bluemix.net/

個人的に利用することが多く、また定期的に課金情報を把握する必要性があるため、そのチェックを自動化したいと思ったことが動機である。
リッチなインターフェースであるため、このサイトで処理を自動化できれば大抵のサイトでも手順を応用できるだろう。


(乗り越えるべき技術的ポイント)
1. IDとパスワードを使ってログイン

2. 個人設定を表示させるアイコンをクリック
 既存画面の前面へポップアップ画面が表示される
 その管理画面で数か所の項目を選択

3. 課金情報画面へ遷移し、閉じられているサービス単位の課金項目をすべて開示
   (右三角ボタン(▷)を押すと矢印の向きが下(▿)になり課金情報が開く)

1は一般的なフォーム操作である。
難しい部分は2、3だろう。
HTMLが静的ではなく、トリガーイベントにより生成される点である。
ある対象上でマウス操作などをすることでトリガーを発生させ、その動作からできあがったHTMLファイルを操作しなくてはならない。



◆ 利用する道具
言語はRubyを使い、WebのUIテストフレームワークであるCapybaraを利用する。

ブラウザ試験用途の道具としては種々のものがあるがCapybaraを使えば、好みのブラウザをドライバとして指定するだけで共通的な操作で扱うことができる。

・Selenium [ブラウザ利用]
・RackTest [ブラウザシミュレータ]
・Webkit [ブラウザエンジン]
・Poltergeist(PhantomJS) [ブラウザシミュレータ]


またRubyのDSLテストフレームワークとして以下のようなものが有名だろう。
今回は試験用コードは書かないが、テストする場合もCapybaraと親和性高く組み合わせることができる。
・Rspec
・Test::Unit
・MiniTest::Spec
・Cucumber



◆ 事前準備
(Capybaraのインストール)
gem経由で入れる。
$ gem install capybara


(Poltergeist(PhantomJS)のインストール)
先にいくつか試験で使えそうなブラウザを紹介したが、今回はPoltergeist(PhantomJS)を使う。
ブラウザを起動せず(GUIのないヘッドレスブラウザ)、JavaScriptが実行できることからこちらを選んだ。

導入はredhat系OSでは以下の通り。
多少時間がかかる。

$ sudo yum -y install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel

$ cd /usr/local/src/

$ git clone --recurse-submodules git://github.com/ariya/phantomjs.git

$ cd phantomjs

$ ./build.py

$ sudo ln -s /usr/local/src/phantomjs/bin/phantomjs /usr/bin/phantomjs


(nokogiriのインストール)
html解析用にnokogiriも入れておく。
$ gem install nokogiri



◆ クローリングコード