Vagrant の CentOS で Selenium テストを回したい
VagrantのCentOSでSeleniumを回してみたいと思い、色々と調べて試してみました。
Vagrant上のCentOSはそのままではSeleniumは動きません。
そのため仮想のGUI環境、ブラウザを別途用意する必要があります。
今回は
- 仮想のGUI環境…「Xvfb」
- ブラウザ…「firefox」
をそれぞれ用いて行っていきたいと思います。
下記は CentOS release 6.7 (Final) にて行っております。
参照:
xvfbとfirefoxでseleniumをヘッドレスに起動する手順 - 文系プログラマによるTIPSブログ
Webページのスクリーンショットを撮る方法(Xvfb + Firefox + ImageMagick) - PukiWiki
Xvfb と Firefox のインストール
まずは仮想のGUI環境であるXvfbとブラウザのFirefoxをインストールします。
-
Javaのインストール
sudo yum -y install java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64
-
Xvfb と firefox のインストール
sudo yum -y install xorg-x11-server-Xvfb firefox
-
ブラウザの文字化けを防ぐために日本語フォントをインストール
sudo yum -y groupinstall "Japanese Support"
bash の設定変更
sudo vi ~/.bash_profile
にて以下の様に編集します。
# User specific environment and startup programs
export DISPLAY=:1
PATH=$PATH:$HOME/bin
上記の部分にexport DISPLAY=:1
を追加しています。
Xvfbを起動する
Xvfb :1 -screen 0 1024x768x24 > /dev/null &
上記のコマンドでXvfbを起動します。
&を用いてバックグラウンド実行します
[vagrant@localhost ~]$ Xvfb :1 -screen 0 1024x768x24 > /dev/null &
[1] 4516
[vagrant@localhost ~]$ _XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
~~~
省略
~~~
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension GLX
firefox を起動する
firefox -display :1 -width 1024 -height 800 > /dev/null &
上記のコマンドでfirefoxを実行します。
[vagrant@localhost ~]$ 6 XSELINUXs still allocated at reset
SCREEN: 0 objects of 256 bytes = 0 total bytes 0 private allocs
DEVICE: 0 objects of 96 bytes = 0 total bytes 0 private allocs
CLIENT: 0 objects of 144 bytes = 0 total bytes 0 private allocs
~~~
省略
~~~
1 CURSOR_BITSs still allocated at reset
TOTAL: 0 objects, 0 bytes, 0 allocs
Xlib: extension "RANDR" missing on display ":1".
*補足 バックグラウンドで実行中のプログラムを確認する方法
jobs
コマンドを使います
[vagrant@localhost ~]$ jobs
[1]- 実行中 Xvfb :1 -screen 0 1024x768x24 &
[2]+ 実行中 firefox &
画像ライブラリのImageMagickをインストール
sudo yum install ImageMagick
コマンドでImageMagickをインストール。
これは画像のスクリーンショットなどをpng形式に変換する画像ライブラリです。
参考:サーバーでWeb画面のスクリーンショットを取る - いしだ日記
import -window root screenshot.jpg
を用いる事で現在のシステムのスクリーンショットを取得する事ができます。
-window オプションつけずに import を実行するとウィンドウや任意の領域をインタラクティブに選択する事ができます。
参考:スクリーンショットの取得 - ArchWiki
この様にcentosの画面のスクリーンショットが撮れる様になります。
selenium のインストール
-
selenium-sebdriverをインストール
gem install selenium-webdriver
-
pipをインストール
sudo easy_install pip
-
selenium 本体をインストール
pip install selenium
実行してみる
試しに以下のように、グーグル検索をかけ、
一番最初に出てきたページのurlとtitleを表示するコードを試してみました。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
serch_list = ["banana","strawberry","apple"]
driver = webdriver.Firefox()
driver.implicitly_wait(3)
for list in serch_list:
driver.get("https://www.google.co.jp/")
driver.set_window_size(1024,800)
driver.find_element_by_name("q").send_keys(list)
time.sleep(2)
driver.find_element_by_name("q").send_keys(Keys.RETURN)
print driver.find_element_by_xpath('//h3[@class="r"]//a').text,
print driver.find_element_by_xpath('//h3[@class="r"]//a').get_attribute("href")
driver.quit()
python test.py
にて実行すると
Banana Republic Japan Official Online Store |公式バナナ ... http://www.bananarepublic.co.jp/
strawberryの意味 - 英和辞典 Weblio辞書 http://ejje.weblio.jp/content/strawberry
Apple(日本) http://www.apple.com/jp/
きちんと実行されていました!
参考にさせていただいたサイトの皆様、ありがとうございました。
また上記の記事に不備不足などございましたら、何卒ご指導の程よろしくお願い致します。