PHP
Selenium

MACでphpunit/phpunit-selenium/facebook webdriverでテストする環境を作る

phpとseleniumを使ったテスト環境を作るための覚え書きです

  • まず、composerが必要なので入ってない場合はインストールします
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
  • 次にphpunit/phpunit-selenium/facebook-webdriverを追加します
composer global require phpunit/phpunit
composer require --dev phpunit/phpunit-selenium
composer require facebook/webdriver
  • 次に、webdriverのバイナリをインストールします

Firefox( https://github.com/mozilla/geckodriver/releases/ )

curl -L "https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.18.0-macos.tar.gz" -o geckodriver-v0.18.0-macos.tar.gz
tar zxvf geckodriver-v0.18.0-macos.tar.gz
mv geckodriver /usr/bin/
chmod +x /usr/local/bin/geckodriver

Chrome( https://sites.google.com/a/chromium.org/chromedriver/downloads )

curl -L "https://chromedriver.storage.googleapis.com/2.30/chromedriver_mac64.zip" -o chromedriver_mac64.zip
unzip chromedriver_mac64.zip
mv chromedriver /usr/local/bin/
chmod +x /usr/local/bin/chromedriver

次にselenium-server( http://www.seleniumhq.org/download/ )をインストールします

curl -L "https://goo.gl/s4o9Vx" -o selenium-server-standalone-3.4.0.jar
mv selenium-server-standalone-3.4.0.jar /usr/local/bin/
chmod +x /usr/local/bin/chromedriver

起動

java -jar selenium-server-standalone-3.4.0.jar &

停止

ps aux | grep [s]elenium-server-standalone | awk '{ print "kill -9", $2 }' | sh

サンプルスクリプト

sample.php
<?php

require_once 'vendor/autoload.php';

use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;

/**
* selenium php-webdriver 動作サンプル
* @param string $browser chrome or firefox
*/

function testcode ($browser)
{
 // selenium-serverの起動しているホストを指定
 $host = 'http://localhost:4444/wd/hub';

 switch ($browser) {
  case 'chrome': // chrome ドライバーの起動
  $driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
  break;
 case 'firefox': // firefox ドライバーの起動
  $driver = RemoteWebDriver::create($host, DesiredCapabilities::firefox());
  break;
 }

 // 画面サイズをMAXに(GeckoDriver Ver 0.17~ , ChromeDriver Ver 2.29~ 使用可能 )
 $driver->manage()->window()->maximize();

 // 指定URLへ遷移 (Google)
 $driver->get('https://www.google.co.jp/');

 // 検索Box
 $element = $driver->findElement(WebDriverBy::name('q'));

 // 検索Boxにキーワードを入力して
 $element->sendKeys('php selenium');

 // 検索実行
 $element->submit();

 // 検索結果画面のタイトルが 'php selenium - Google 検索' になるまで10秒間待機する
 // 指定したタイトルにならずに10秒以上経ったら
 // 'Facebook\WebDriver\Exception\TimeOutException' がthrowされる

 $driver->wait(10)->until(
  WebDriverExpectedCondition::titleIs('php selenium - Google 検索')
 );

 // GWの予定 - Google 検索 というタイトルを取得できることを確認する
 if ($driver->getTitle() !== 'php selenium - Google 検索') {
  throw new Exception('fail');
 }

 //GitHub - facebook/php-webdriver: A php client for webdriver.が検索結果に出現するまで待つ
 $driver->wait(10)->until(
  $element = $driver->findElement(WebDriverBy::linkText("GitHub - facebook/php-webdriver: A php client for webdriver."))
 );
 $element->click();

 // キャプチャ
 $file = __DIR__ . '/' . __METHOD__ . "_{$browser}.png";
 $driver->takeScreenshot($file);

 // ブラウザを閉じる
 $driver->close();
}

 // chrome
 testcode('chrome');

 // firefox
 testcode('firefox');

実行

php sample.php

ブラウザがスクリプトに書かれているように

1.googleを開く
2.php seleniumを検索窓にいれる
3.検索を実行する(フォームをサプミットする)
4.検索結果画面のタイトルが 'php selenium - Google 検索' になるまで10秒間待機する
5.GitHub - facebook/php-webdriver: A php client for webdriver.という検索結果をクリックする
6.スクリーンショットを取る
7.セッションを閉じる

という動作をすれば成功です。参考になれば