以下の3つのプロパティを適切に設定すれば、テスト失敗時にスクリーンショットが作成されます。
protected $captureScreenshotOnFailure = true; protected $screenshotPath = '/var/www/localhost/htdocs/screenshots'; protected $screenshotUrl = 'http://localhost/screenshots';ただし、これだけだとスクリーンショット名が、自動で決まる文字列の羅列になってしまい、どのテストで失敗したのかわかりにくいです。なのでカスタマイズしてみます。
スクリーンショット名は https://github.com/giorgiosironi/phpunit-selenium/blob/master/PHPUnit/Extensions/SeleniumTestCase.php の takeScreenshot() で決まるようです。スクリーンショットディレクトリを返すメソッド "$this->getScreenshotPath()" が呼ばれていて、このメソッドはたぶんここでしか使われていないので、オーバーライドしてみました。
まとめると、以下のようになります。$screenshotPath は、とりあえず "__DIR__" にしています。$screenshotUrlは、とりあえずドキュメントの通りです。(これどんな意味があるのだろうか。)
protected $captureScreenshotOnFailure = true; protected $screenshotPath = __DIR__; protected $screenshotUrl = 'http://localhost/screenshots'; /** * {@inheritdoc} */ protected function getScreenshotPath() { $className = end(explode('\\', get_class())); $methodName = \PHPUnit_Framework_Testcase::getName(false); return parent::getScreenshotPath().sprintf('%s_%s_', $className, $methodName); }テストを失敗させて "{クラス名}_{メソッド名}_{文字列の羅列}.png"が作成されればOKです。
takeScreenshot()のオーバーライドだと丸ごと書かないといけないので、この方法を選びました。getScreenshotPath()というメソッド名の意味合いは変わってしまいますが、まあ、テストケースなので良いかなと。
No comments:
Post a Comment