Windows10でSeleniumとPHPUnitの環境設定

ローカルのマシンでテストコードを書くためにやった手順のメモです。

#環境
Windows10
#事前準備
PHPとJavaを用意します。今回はXAMPPのPHPを使います。
##XAMPP
以下からダウンロードします。
https://www.apachefriends.org/download.html
Version 5.6.15 32bit(64bitに対応している)

システム環境変数の編集
Path=C:\xampp\php

コマンドプロンプトでのバージョン確認

```bat:PHPバージョン確認
php -v
```

##Java
以下からダウンロードします。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Java SE Development Kit Windows x64

システム環境変数の編集
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_74
Path=%JAVA_HOME%\bin

コマンドプロンプトでのバージョン確認

```bat:javaバージョン確認
java -version
```

#Composerのインストール
ComposerというのはPHPのパッケージ依存管理ツールです。
まずコマンドプロンプトでPHPのフォルダに移動します。

```bat:phpフォルダに移動
cd C:\xampp\php
```
以下をコマンドプロンプトで実行するとインストールされます。

```bat:Composerインストール
php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
php -r "if (hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```
Composerの起動が楽になるようにBATファイルを作っておきます。
コマンドプロンプトで以下を実行します。

```bat:BATファイル作成
echo @php "%~dp0composer.phar" %*>composer.bat
```
するとコマンドプロンプトでcomposerと打つと起動するようになりました。

```bat:composerの起動
composer
```

コマンドプロンプトで以下のようにシンボリックリンクを作っておくと、bashでも実行できるようになります。
Git Bashでコミットしている場合はBashの操作だけで済むのでこちらのほうが便利です。

```bash:シンボリックリンクの作成
mkdir ~/bin
ln -s /c/xampp/php/composer.phar ~/bin/composer
```

以上でComposerのインストールは完了です。

#Selenium Standalone Server
以下からダウンロードします。
http://www.seleniumhq.org/download/
Selenium Standalone Server 2.52.0

bashでホームディレクトリにselenium-serverというディレクトリを作って
ダウンロードしたselenium-server.jarをそこに移動させます。

```bash:selenium-server.jarの移動
mkdir selenium-server
mv ~/Download/selenium-server.jar selenium-server/
```

Selenium Serverの起動が楽になるようにBATファイルを作っておきます。

```bat:SeleniumServerのBATファイルの作成
echo java -jar "%~dp0selenium-server-standalone-2.52.0.jar" %*>selenium-server.bat
```

これでコマンドプロンプトでselenium-serverと打てば起動するようになりました。

```bat:SeleniumServerの起動
cd ~/selenium-server
selenium-server
```

以上でSelenium Serverの準備完了です。

#PHPUnit

以下のようなcomposer.jsonを任意のプロジェクトファイル配下に用意します。

```json:composer.json
{
  "require-dev": {
    "phpunit/phpunit": "5.0.*",
    "phpunit/phpunit-selenium": "2.0.*"
  }
}
```

コマンドプロンプトでそのプロジェクトファイルに移動して、
以下を実行するとプロジェクトフォルダ配下にvendorフォルダが生成され、必要なもの一式がダウンロードされます。
※Git管理している場合はvendorを.gitignoreに追加します。

```bat:ライブラリのインストール
composer update
```


これで準備完了です。

#テストファイルの作成

プロジェクトフォルダ配下に以下のようなテストファイルを作成します。

```php:WebTest.php
<?php
require_once "vendor/autoload.php";

class WebTest extends PHPUnit_Extensions_Selenium2TestCase {
	public function setUp()
	{
		$this->setBrowser('firefox');
		$this->setBrowserUrl('https://github.com/');
	}
	
	public function testHello()
	{
		$this->url('/');
		$this->byLinkText('Sign in')->click();
		$id = $this->byId('login_field');
		$id->value('1234');
		$password = $this->byId('password');
		$password->value('abc');
		$password->submit();
		$filePointer = fopen('hoge.png', 'w');
		fwrite($filePointer, $this->currentScreenshot());
		fclose($filePointer);
	}
}
```

#テストの実行

作成したテストをBashで実行します。

```bash:PHPUnit実行
vendor/bin/phpunit WebTest
```

これでテスト結果が表示されるはずです。