Vagrant の CentOS で Selenium テストを回したい

  • 13
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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

screenshot.jpg
この様に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/

きちんと実行されていました!

参考にさせていただいたサイトの皆様、ありがとうございました。
また上記の記事に不備不足などございましたら、何卒ご指導の程よろしくお願い致します。