LoginSignup
1
1

More than 5 years have passed since last update.

Laravel Dusk で縦長画面のキャプチャを撮りたい

Posted at

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1