とある角度から

お腹いっぱいたべられる幸せ

仮想マシン上で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

スクリーンショットを撮るためのxwdコマンドをインストー

$ 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側で確認する
f:id:n_1010real:20170510181815p:plain
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

f:id:n_1010real:20170510185937p:plain 成功。スクリーンショットも取れてました。 f:id:n_1010real:20170510190238p:plain

さいごに

他のブラウザでもwebDriverを登録して、スクリプトを少し修正すればいけるはず。
ただ、テストケースから直接webDriverを呼び出しているので、ブラウザ毎(&ドライバ毎)にスクリプトの修正が必要になる。
呼び出すDriverの切り分けはSelenium Serverにお任せしたいので、それも試さなければ。。

参考

ありがとうございました!
Vagrant の CentOS で Selenium テストを回したい - Qiita
CentOS7の日本語化(日本語環境で利用する)
RubyでSeleniumを使ってスクレイピング - Qiita
Selenium IDEからRubyのテストケースを書き出す | | Scimpr Blog
入門、Selenium - Seleniumの仕組み | CodeGrid