PHPUnit Selenium2で失敗時にスクリーンショットを取得する方法

PHPUnit_Extensions_Selenium2TestCaseで失敗時にスクリーンショットを取得には、onNotSuccessfulTest()メソッドをオーバーライドし、PHPUnit_Extensions_Selenium2TestCase_ScreenshotListenerを使用します。

class WebTestCase extends PHPUnit_Extensions_Selenium2TestCase
{
    public function onNotSuccessfulTest(Exception $e)
    {
        if ($e instanceof PHPUnit_Framework_AssertionFailedError) {
            // 失敗時にスクリーンショットを保存
            $listener = new PHPUnit_Extensions_Selenium2TestCase_ScreenshotListener(
                TESTPATH . 'failure-screenshot' // 保存先のフォルダ
            );
            $listener->addFailure($this, $e, null);
        }

        parent::onNotSuccessfulTest($e);
    }
…略…

また、テスト中に任意の時点でスクリーンショットを取得するには、currentScreenshot()メソッドを使います。

    public function testScreenshotsCanBeTakenAtAnyMoment()
    {
        $this->url('html/test_open.html');
        $screenshot = $this->currentScreenshot();
        …略…
    }

https://github.com/sebastianbergmann/phpunit-selenium/blob/master/Tests/Selenium2TestCaseTest.php#L739より。

画像が文字列として取得できますので、ファイルに書き出せばOKです。

関連

Date: 2014/01/14

Tags: phpunit, selenium, php, testing