Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Dusk screenshot

I'm using laravel 5.6 and Dusk for running some tests.

I'm always taking my screenshot like this

...
use Facebook\WebDriver\WebDriverDimension;
...
class LoginTest extends DuskTestCase
{
    public function testLogin()
    {
        $user = User::first();

        $this->browse(function ($browser) use ( $user ) {
            $test = $browser->visit( new Login)
                    ->resize(1920,1080)                    
                    ...                
                    ->driver->takeScreenshot(base_path('tests/Browser/screenshots/testLogin.png'));
        });
    }
}

But as my tests will be more and more used, I don't want to continue to write everytime ->resize(X,Y) and base_path('bla/blab/bla').

I wanted to define the size and path for every tests that will be written.

I guess I should define some function in tests/DesukTestCase.php but I'm not even aware of how I can retrieve the driver and so on.

Have you got some guidance or documentation about this? Because I can't find anything...

like image 333
Atnaize Avatar asked Jul 31 '18 12:07

Atnaize


3 Answers

In my DuskTestCase file I have the below in my driver() function.

protected function driver()
{
    $options = (new ChromeOptions())->addArguments([
        '--disable-gpu',
        '--headless',
    ]);

    $driver = RemoteWebDriver::create(
        'http://selenium:4444/wd/hub',
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY,
            $options
        )
    );

    $size = new WebDriverDimension(1280, 2000);
    $driver->manage()->window()->setSize($size);

    return $driver;
}

You should just be able to configure it with the right dimensions you need.

like image 94
ajtrichards Avatar answered Oct 13 '22 15:10

ajtrichards


You only need to add '--window-size=1920,1080' in $options. This will apply a 1920x1080 screen resolution to all your Dusk tests. Feel free to adjust to whatever window size you want.

So your DuskTestCase.php file should look like this:

protected function driver()
{
    $options = (new ChromeOptions())->addArguments([
        '--disable-gpu',
        '--headless',
        '--window-size=1920,1080',
    ]);

    $driver = RemoteWebDriver::create(
        'http://selenium:4444/wd/hub',
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY,
            $options
        )
    );

}
like image 35
maelga Avatar answered Oct 13 '22 15:10

maelga


Regarding the path issue, you can set it with Browser::$storeScreenshotsAt in setUp method of your test case class.

protected function setUp()
{
    parent::setUp();
    Browser::$storeScreenshotsAt = '/path/to/your/screenshots';
}

Default location of Browser::$storeScreenshotsAt is set in setUp method of the grand parent test case class. So, make sure that you set Browser::$storeScreenshotsAt after calling parent::setUp(), otherwise it will be overwritten by the default.

like image 29
kanji Avatar answered Oct 13 '22 14:10

kanji