前回 はローカルのmacでphp-webdriverを試したので、今回は CentOS 6.8 上での実行を目標に作業を行っていきます。
先に断っておきますと、とりあえず利用するブラウザはFirefoxのみです。
環境
- CentOS 6.8
$ cat /etc/redhat-release
CentOS release 6.8 (Final)Java (jdk) のインストール
$ sudo yum -y install java- 確認
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)1.8が入らなかった場合とかソースから直接インストールしたい場合
$ wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
$ sudo rpm -ivh jdk-8u131-linux-x64.rpmhttp://download.oracle.com/otn-pub/java/jdk/以下のパスはバージョンによって変わるので注意- rpmファイル名も変わります
- Java SE – Downloads | Oracle Technology Network | Oracle からJDKの確認をしてください
- 参考: Linuxでjdkをwgetする方法 – Qiita
Firefoxのインストール
$ sudo yum -y install firefox- 確認
$ firefox -v
Mozilla Firefox 52.1.0geckodriverのインストール
理由は後述しますが v0.15.0 を選択します。
$ wget https://github.com/mozilla/geckodriver/releases/download/v0.15.0/geckodriver-v0.15.0-linux64.tar.gz
$ tar xvf geckodriver-v0.15.0-linux64.tar.gz
$ chmod +x geckodriver
$ sudo mv geckodriver /usr/local/bin/selenium-server-standalone のダウンロード
理由は後述しますが selenium-server-standalone-3.3.1.jar を選択します。
$ wget http://selenium-release.storage.googleapis.com/3.3/selenium-server-standalone-3.3.1.jarXvfb & 日本語フォント のインストール
ヘッドレス環境でSeleniumを実行させたいので仮想ディスプレイ(をエミュレートする)Xvfbをインストールします。
$ sudo yum -y install xorg-x11-server-Xvfb
$ sudo yum -y groupinstall "Japanese Support"※ フォントのインストールで パッケージ vlgothic-fonts-20091202-2.el6.noarch はインストール済みか最新バージョンです とか出るかもしれませんがそれはそれでおkです
試す
Xvfbの起動
仮想ディスプレイとなるXvfbを起動させます。
$ sudo Xvfb :1 -screen 0 1366x768x24 &
$ export DISPLAY=:1seleniumの起動
seleniumを起動させます。
$ java -Dwebdriver.gecko.driver=/usr/local/bin/geckodriver -jar selenium-server-standalone-3.3.1.jar &上記の起動処理をまとめたshell
上記の起動処理をまとめたshellはこんな感じです。
sudo sh start_selenium.sh
#!/bin/bash
##################################################
# Xvfb(仮想ディスプレイ), selenium の起動
# デフォルトのサイズは 1366x768x24 です
##################################################
# Xvfb(仮想ディスプレイ)の起動 サイズ(横x高さx深度)は変えたかったら変えてください
sudo Xvfb :1 -screen 0 1366x768x24 &
# :1 のディスプレイですよ
export DISPLAY=:1
# selenium
java -Dwebdriver.gecko.driver=/usr/local/bin/geckodriver -jar selenium-server-standalone-3.3.1.jar &サンプル用のコードを落とす
拙作ですが shimabox/sample-phpwebdriver: Test with phpunit and phpwebdriver を使ってみます。
$ git clone https://github.com/shimabox/sample-phpwebdriver.git
$ cd sample-phpwebdriver
$ composer install --devテスト
$ vendor/bin/phpunit --group firefox
OK (2 tests, 3 assertions)上記のようにテストが通ればおkです。あとは煮るなり焼くなりして頂ければと存じます。
停止
Xvfbの停止
$ ps aux | grep [X]vfb | awk '{ print "sudo kill -9", $2 }' | shseleniumの停止
$ ps aux | grep [s]elenium-server-standalone | awk '{ print "kill -9", $2 }' | shgeckodriverの停止
$ ps aux | grep [g]eckodriver | awk '{ print "kill -9", $2 }' | sh上記の停止処理をまとめたshell
上記の停止処理をまとめたshellはこんな感じです。
sudo sh kill_selenium.sh
#!/bin/bash
# Xvfb(仮想ディスプレイ)のkill
ps aux | grep [X]vfb | awk '{ print "sudo kill -9", $2 }' | sh
# seleniumのkill
ps aux | grep [s]elenium-server-standalone | awk '{ print "kill -9", $2 }' | sh
# geckodriverのkill
ps aux | grep [g]eckodriver | awk '{ print "kill -9", $2 }' | sh何で geckodriver v0.15.0, selenium-server-standalone-3.3.1.jar なんだぜ?
testの中で $driver->manage()->window()->setSize(\Facebook\WebDriver\WebDriverDimension); のように画面サイズを変更しているところで
xx:xx:xx.xxx WARN - Exception thrown
org.openqa.selenium.WebDriverException: setWindowRect
・
・
・
Facebook\WebDriver\Exception\UnknownServerException: setWindowRectこんなエラーが出るからです。
driver側のエラーなのかselenium側のエラーなのかよく分かりませんが、とりあえず現時点での最新バージョン(geckodriver v0.16.1, selenium-server-standalone-3.4.0.jar)の一個前のバージョンを指定すると回避できます。あぼーーん。
番外編 (CentOS 6.5の場合)
実はCentOS 6.5でも試したことがあって、その時firefoxは45.7.0が入りました。
んで、seleniumのバージョンは2.53.1.jarを使って、seleniumの実行は sudo java -Dwebdriver.firefox.bin=/usr/bin/firefox -jar selenium-server-standalone-2.53.1.jar & で行いました。そうすると、あら不思議、takeScreenshot() での画面キャプチャは全画面映してくれたんですね。
これはもしや、geckodriverの。。まぁ、そのうち解決されるんじゃないかなと思っています。
おわりに
こんな感じで、CentOS6.8でFirefoxとSeleniumとPHPUnitとphp-webdriverを使ったE2Eのテストが書けます(めんどくせーー)。
※ 多分、6.9でもいけると思います、たぶん
あれ、Chromeは?
Chromeもまためんどくさかったので別の記事で書きます。
参考にさせて頂きました
上記内容で動作しないケースがあったら
こちらの記事を参考にして頂けると解決するかもしれません。
php-webdriverのラッパーライブラリ”screru”のバージョンをあげた – Shimabox Blog