SeleniumでE2Eブラウザテストを行う
2025.03.11 09:00
2025.04.12 13:03

前回はSelenium環境の作成を行いましたが、今回はその環境を使ってテストを行ってみます。
最初にphpunitをインストール。
$ composer require phpunit/phpunit
次にテスト用のPHPファイルを作成します。
まずはPHPUnitを使わないでチェックするコードを書いてみます。
<?php
require_once './vendor/autoload.php';
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use PHPUnit\Framework\TestCase;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
// selenium
$host = 'http://selenium:4444/wd/hub';
// chrome ドライバーの起動
$driver = RemoteWebDriver::create($host,DesiredCapabilities::chrome());
try {
// 指定URLへ遷移 (Google)
$driver->get('https://example.com');
// 指定URLのソースを取得
$page = $driver->getPageSource();
// 指定の文字列を指定
$text = "Example Domain";
// チェックする
if (strpos($page, $text) !== false) {
echo $text . "が存在しました。\n";
} else {
echo $text . "は存在しませんでした。\n";
}
} catch (Exception $e) {
echo "エラー: " . $e->getMessage() . "\n";
} finally {
// プロセスを終了する
$driver->quit();
}
結果が画面上に表示されます。
では次にPHPUnitに対応させます。
まずはPHPコードをクラスに書き換えます。「tests」ディレクトリを作り、その中に「SeleniumTest.php」を作成します。
phpUnitでは、ファイル形式が「xxxTest.php」のように、「Test.php」が最後に入っている必要があり、これがないとテストをスルーされるらしいのです。なので今回は「SeleniumTest.php」としておきました。
<?php
use PHPUnit\Framework\TestCase;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverBy;
class SeleniumTest extends TestCase
{
private $driver;
protected function setUp(): void
{
// SeleniumサーバーのURLを指定
$host = 'http://selenium:4444/wd/hub';
$this->driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
}
protected function tearDown(): void
{
$this->driver->quit();
}
public function testPageContainsText()
{
// 対象のURLを指定
$this->driver->get('https://example.com');
// 検索する文字列
$textToFind = "Example Domain";
$pageSource = $this->driver->getPageSource();
// 文字列が含まれているかチェック
$this->assertStringContainsString($textToFind, $pageSource, "指定の文字がページに見つかりません。");
}
}
次に「phpunit.xml」を作成します。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Selenium Tests">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
testsディレクトリ内のテストファイルをすべて実行するって感じですね。
ではコマンドラインでテストを実行してみましょう。
$ docker compose exec php php vendor/bin/phpunit
OKが出るはずです。
もし指定の文字がなければテストが通らないということで「FAILURES!」が出ます。
これでテスト環境作成完了です!
今回は以上です!