Marco Aurélio Deleu
Marco Aurélio Deleu

Reputation: 4367

Running Laravel Dusk on Headless (no GUI) machine

With the recent announcement of Laravel 5.4, I thought I'd give it a try. Like Ozymandias-X on Reddit, I also have been frustrated by it.

My Setup

If I just turn on my machine and run php artisan dusk, I get the following:

[08:14 AM]-[root@php7]-[/var/www/html/admin]-[git master]
# php artisan dusk
PHPUnit 5.7.11 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 25.91 seconds, Memory: 10.00MB

There was 1 error:

1) Tests\Browser\LoginTest::it_should_see_email_error_message
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"binary":"\/usr\/lib64\/chromium-browser\/chromedriver","args":["no-first-run"]}}}

Operation timed out after 5001 milliseconds with 0 out of -1 bytes received

/var/www/html/admin/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:287
/var/www/html/admin/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:121
/var/www/html/admin/tests/DuskTestCase.php:42
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:180
/var/www/html/admin/vendor/laravel/framework/src/Illuminate/Support/helpers.php:639
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:181
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:111
/var/www/html/admin/vendor/laravel/dusk/src/TestCase.php:85
/var/www/html/admin/tests/Browser/LoginTest.php:24

ERRORS!
Tests: 1, Assertions: 1, Errors: 1.

I tried to follow Mike Smith's article, but executing ./vendor/laravel/dusk/bin/chromedriver-linux manually and commenting out static::startChromeDriver(); from DuskTestCase didn't help at all. I also tried installing Xvfb and running it on port :0 manually and same thing happens. Lastly, I tried running the driver manually from /usr/lib64/chromium-browser/chromedriver (2.25) and no change at all.

I'm trying to avoid running this from Windows directly because I intend to have a CI process with a headless/no-gui linux and I'll have to set up the same thing I'm trying right now.

Upvotes: 6

Views: 6605

Answers (3)

Stan Smulders
Stan Smulders

Reputation: 6237

For anyone else that's running into issues with Dusk in headless mode, give this a try:

In DuskTestCase use the following driver function:

/**
 * Create the RemoteWebDriver instance.
 *
 * @return \Facebook\WebDriver\Remote\RemoteWebDriver
 */
protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        '--disable-gpu',
        '--headless',
        '--no-sandbox',
    ]);

    return RemoteWebDriver::create(
            'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )->setCapability('acceptInsecureCerts', TRUE)
    );
}

Did the trick for me :-)

Upvotes: 3

Marco Aurélio Deleu
Marco Aurélio Deleu

Reputation: 4367

The solution is to either run chrome with no-sandbox or NOT run it as root at all. I created a user called dusk and under that Dusk will work with no problems.

login as: dusk
[email protected]'s password:
Last login: Mon Mar  6 13:07:30 2017 from 192.168.56.1
[dusk@php7 ~]$ Xvfb -ac :0 -screen 0 1280x1024x16 &
[1] 2177
[dusk@php7 ~]$ cd /var/www/solucoesideais/laravel-dusk/
[dusk@php7 laravel-dusk]$ php artisan serve --host=127.0.0.1 --port=8000 --env=dusk.environment &
[2] 2186
[dusk@php7 laravel-dusk]$ Laravel development server started: <http://127.0.0.1:8000>

[dusk@php7 laravel-dusk]$ php artisan dusk
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.

[Mon Mar  6 13:23:28 2017] 127.0.0.1:59146 [200]: /favicon.ico
.                                                                   1 / 1 (100%)

Time: 3.7 seconds, Memory: 10.00MB

OK (1 test, 1 assertion)
[dusk@php7 laravel-dusk]$

Upvotes: 3

Marco Aur&#233;lio Deleu
Marco Aur&#233;lio Deleu

Reputation: 4367

Note: This is not the accepted answer because the real problem is with Cent OS. This answer is just a suggestion while we don't have a solution for RedHat.

The problem is with Cent OS. By doing everything I did on a Ubuntu distribution, it worked easily. This post om medium based on this gist is enough to get anyone going. I'm going to highlight some points here in case the link breaks.

Dependencies

# makes sure all your repos are up to date
sudo apt-get update
# chrome dependencies I think
sudo apt-get -y install libxpm4 libxrender1 libgtk2.0-0 libnss3 libgconf-2-4
# chromium is what I had success with on Codeship, so seemed a good option
sudo apt-get install chromium-browser
# XVFB for headless applications
sudo apt-get -y install xvfb gtk2-engines-pixbuf
# fonts for the browser
sudo apt-get -y install xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable
# support for screenshot capturing
sudo apt-get -y install imagemagick x11-apps

Running the Xvfb

Xvfb -ac :0 -screen 0 1280x1024x16 &

Done

Upvotes: 3

Related Questions