Laravel Dusk で画面キャプチャが簡単に取れるのですが、
ディスプレイに収まらない場合、全体画像が取れないことがわかり、対処方法を考えてみました。
対処方法 - 概要
通常の画像と
一番下にスクロールした画像を撮影することで、
画面全体が確認できるようにしました。
> 2枚で収まらないケースが出てきたら、再検討します。
実行環境
Laravel5.5
MacOS High Sierra 10.13.2
PHP 7.1
Docker 18.06.0
対処方法 - 詳細
DuskTestCase.php に以下を追記
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverDimension;
abstract class DuskTestCase extends BaseTestCase
{
// ------ 一番下に追記 ---------
/**
* Caputure Image for Long page.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function captureImage($browser)
{
$body = $browser->driver->findElement(WebDriverBy::tagName('body'));
if (!empty($body)) {
$currentSize = $body->getSize();
$size = new WebDriverDimension($currentSize->getWidth(), $currentSize->getHeight());
$browser->driver->manage()->window()->setSize($size);
}
$browser->screenshot(date("Ymd")."_".$this->getName()."_001");
$browser->script('window.scrollTo(0, 500);');
$browser->screenshot(date("Ymd")."_".$this->getName().'_002');
}
テストクラスの中で、画面キャプチャを撮りたい箇所に以下を記載する
parent::captureImage($browser);
これで、以下2枚の画像がキャプチャされます。
現在日付 + ファンクション名 + 001.jpg
現在日付 + ファンクション名 + 002.jpg