仮想マシン上でSelenium IDEで作ったテストケース(ruby)を動かす
やりたいこと
Selenium IDEでテストケースをポンポン貯めてって、Jenkinsで勝手にテストして、テストが通らなかった場合はチャットに流す仕組み。
ひとまずVM上でテストケースを動かすだけで、割とやることがあったのでメモメモ
環境
ホストOS
OS X 10.11.6(El Capitan)
ゲストOS
VirtualBox 5.1.14
Vagrant 1.9.1
Centos-7.3
Ruby 2.3.0(x86_64-linux)
準備1:centos上でfirefoxを動かす
仮想ディスプレイXvfbとfirefoxをインストール
$ sudo yum -y install xorg-x11-server-Xvfb firefox
Xvfbの設定のため、bash_profileを編集
$ sudo vi ~/.bash_profile
して以下の様に編集
# User specific environment and startup programs
export DISPLAY=:1
設定し終わったら、 $ source ~/.bash_profile
で設定再読込
centos7を日本語環境化
必要なパッケージをインストール
$ sudo yum install ibus-kkc vlgothic-*
言語設定を「ja_JP.UTF-8」に変更
$ cat /etc/locale.conf
LANG="en_US.UTF-8"
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ source /etc/locale.conf
$ cat /etc/locale.conf
LANG=ja_JP.UTF-8
動作確認のため、画面キャプチャを取れるようにする
ImageMagickをインストール
$ sudo yum -y install ImageMagick
$ sudo yum -y install xwd netpbm-progs
仮想ディスプレイでfirefoxを起動してスクショを確認
xvfbを起動
$ Xvfb :1 -screen 0 1024x768x24 > /dev/null &
[1] 5450
firefoxを起動。ディスプレイは仮想ディスプレイを指定
$ firefox -display:1 -width 1024 -height 800 > /dev/null &
[2] 5633
$ Xlib: extension "RANDR" missing on display ":1".
GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
バックグラウンドで実行されているプログラムを確認
$ jobs
[1]- 実行中 Xvfb :1 -screen 0 1024x768x24 > /dev/null &
[2]+ 実行中 firefox -display:1 -width 1024 -height 800 > /dev/null &
画面キャプチャを出力
$ xwd -display :1 -root | xwdtopnm | pnmtopng > test.png
xwdtopnm: writing PPM file
$ ls -la
-rw-r--r--. 1 vagrant vagrant 2359312 4月 28 08:29 test.png
これを共有フォルダ(ゲストOSとホストOS間の)とかに移動して、ホストOS側で確認する
Good!
準備2:seleniumからfirefoxを操作するために必要な設定
selenium-webdriver(Ruby)をインストール
$ gem install selenium-webdriver -v 3.4.0
geckodriverを取得、パス配下へ移動して、再読込
wget https://github.com/mozilla/geckodriver/releases/download/v0.16.1/geckodriver-v0.16.1-linux64.tar.gz
tar -xvzf geckodriver-v0.16.1-linux64.tar.gz
sudo mv geckodriver /usr/local/bin/
source ~/.bashrc
テストケースを作成し、ゲストOSで動くように書き換える
適当なテストケースをseleniumIDEで作成し、「Ruby / Test::Unit / WebDriver」でエクスポート
エクスポートしたテストケースがこちら → gist0c078b912c7732c0a14cad07ce41d685
ゲストOSで動くように、テストケースを書き換え
- ${receiver}を@receiverに置き換え
- captureEntirePageScreenshotをdriver.save_screenshotに置き換え(プライベートAPIらしいので非推奨)
修正したテストケースがこちら → giste31d0aea526a5b6f2e47da08fdd5e402
ゲストOSで、テストケースを実行
上記を共有フォルダへ置き、vagrant環境で参照できるようにして実行する
(ファイル名は「case1」gistの名前とは一致してません)
$ ruby case1
成功。スクリーンショットも取れてました。
さいごに
他のブラウザでもwebDriverを登録して、スクリプトを少し修正すればいけるはず。
ただ、テストケースから直接webDriverを呼び出しているので、ブラウザ毎(&ドライバ毎)にスクリプトの修正が必要になる。
呼び出すDriverの切り分けはSelenium Serverにお任せしたいので、それも試さなければ。。
参考
ありがとうございました!
Vagrant の CentOS で Selenium テストを回したい - Qiita
CentOS7の日本語化(日本語環境で利用する)
RubyでSeleniumを使ってスクレイピング - Qiita
Selenium IDEからRubyのテストケースを書き出す | | Scimpr Blog
入門、Selenium - Seleniumの仕組み | CodeGrid