
こんにちは、原田です!
今回はSeleniumを使ってブラウザ操作をしてみたいと思います。
元々はテストツールとして興味があったのですが、今回はお手軽に自動操作を体感するという目的でやっていきます!
DockerでSeleniumを起動する
Dockerを動かせる環境は用意してある前提で始めていきます。
Seleniumは公式でchromeやFirefoxのブラウザ毎にDockerイメージが用意されています。
こちらを使うことでサクッとSeleniumが動かせるとのことなので、こちらを使っていきます。
下記コマンドを実行してコンテナを起動します。
$ docker run -d -p 4444:4444 -p 5900:5900 -v /dev/shm:/dev/shm selenium/standalone-chrome-debug
Dockerの5900ポートがホストの5900ポートにバインドされているので、localhost:5900でDockerのVNCに接続出来ます。
Macであれば以下で確認してみましょう。
Finder > 移動 > サーバへ接続 > サーバーアドレス: vnc://localhost:5900
パスワードが要求されますがデフォルトでは「secret」に設定されています。
WebDriverのインストール
Dockerで起動しているSeleniumに接続するためのWebDriverをインストールします。
今回はPHPで操作したいので下記ソースを使用します。
https://github.com/php-webdriver/php-webdriver
ローカルに落とせたら下記コマンドをたたく。
$ composer update
PHPUnitがインストールされるのでテストコードを書いていきます。
tests/functionalにSelenium_test.phpを作成します。
<?php
namespace Script;
use PHPUnit\Framework\TestCase;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverDimension;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverExpectedCondition;
class Test extends TestCase
{
const WINDOW_HEIGHT = 900;
const WINDOW_WIDTH = 1080;
const SELENIUM_SERVER_HOST = "http://localhost:4444/wd/hub";
protected $driver;
public function testSelenium()
{
// ドライバーを生成
$this->driver = RemoteWebDriver::create(self::SELENIUM_SERVER_HOST, DesiredCapabilities::chrome());
// ブラウザの設定
$this->driver->manage()->window()->setSize(new WebDriverDimension(self::WINDOW_WIDTH, self::WINDOW_HEIGHT));
// 接続
$this->driver->get("https://www.google.co.jp");
// 検索ボックス取得
$element = $this->driver->findElement(WebDriverBy::name('q'));
// キーワード入力
$element->sendKeys('ハローリノベーション');
// 検索実行
$element->submit();
$this->driver->wait(10)->until(
WebDriverExpectedCondition::titleIs('ハローリノベーション - Google 検索')
);
//検索結果の1位にアクセス
$this->driver->findElement(WebDriverBy::className("LC20lb"))->click();
// タイトルを取得
$title = $this->driver->getTitle();
$this->assertEquals('ハロー! RENOVATION | みんなで空き家問題を解決しよう!', $title);
$this->driver->quit();
}
}
Googleの検索画面にアクセスし、「ハローリノベーション」と検索ボックスに入力します。
その後検索結果の一位に表示されたサイトにアクセスし、そのサイトのtitle要素が期待しているものと一致しているかテストします。
動作確認
それでは下記コマンドを実行してテストを行ってみましょう。
$ php vendor/bin/phpunit tests/functional/Selenium_test.php
VNCでブラウザの動作を確認すると画面遷移はこのようになります。




PHPUnitのテスト結果がこのようになっていればOKです。
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 8.08 seconds, Memory: 4.00MB
OK (1 test, 1 assertion)