SeleniumでE2Eブラウザテストを行う

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

前回は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!」が出ます。
これでテスト環境作成完了です!

今回は以上です!