前回 はローカルの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.rpm
http://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.0
geckodriverのインストール
理由は後述しますが 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.jar
Xvfb & 日本語フォント のインストール
ヘッドレス環境で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=:1
seleniumの起動
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 }' | sh
seleniumの停止
$ ps aux | grep [s]elenium-server-standalone | awk '{ print "kill -9", $2 }' | sh
geckodriverの停止
$ 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