简体   繁体   English

在无头(无GUI)机器上运行Laravel Dusk

[英]Running Laravel Dusk on Headless (no GUI) machine

With the recent announcement of Laravel 5.4, I thought I'd give it a try. 随着最近Laravel 5.4的发布,我想我会试一试。 Like Ozymandias-X on Reddit, I also have been frustrated by it. 就像Reddit上的Ozymandias-X一样,我也对它感到沮丧。

My Setup 我的设置

  • Windows 10 as Host; Windows 10作为主机;
  • CentOS 7 as Guest (no GUI installation, no Vagrant) CentOS 7作为访客(没有GUI安装,没有Vagrant)
  • Shared folder with Virtual Box. Virtual Box的共享文件夹。

If I just turn on my machine and run php artisan dusk , I get the following: 如果我打开机器并运行php artisan dusk ,我会得到以下信息:

[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(); 我试图跟随迈克史密斯的文章 ,但手动执行./vendor/laravel/dusk/bin/chromedriver-linux并注释掉static::startChromeDriver(); from DuskTestCase didn't help at all. 来自DuskTestCase根本没有帮助。 I also tried installing Xvfb and running it on port :0 manually and same thing happens. 我也试过安装Xvfb并在port:0上手动运行它,同样的事情发生了。 Lastly, I tried running the driver manually from /usr/lib64/chromium-browser/chromedriver (2.25) and no change at all. 最后,我尝试从/usr/lib64/chromium-browser/chromedriver (2.25)手动运行驱动程序,完全没有变化。

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. 我试图避免直接从Windows运行这个,因为我打算用无头/无gui linux进行CI过程,我将不得不设置我正在尝试的同样的事情。

Note: This is not the accepted answer because the real problem is with Cent OS. 注意:这不是公认的答案,因为真正的问题在于Cent OS。 This answer is just a suggestion while we don't have a solution for RedHat. 这个答案只是一个建议,而我们没有RedHat的解决方案。

The problem is with Cent OS. 问题出在Cent OS上。 By doing everything I did on a Ubuntu distribution, it worked easily. 通过我在Ubuntu发行版上所做的一切,它很容易。 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

Xvfb -ac :0 -screen 0 1280x1024x16 &

Done 完成

The solution is to either run chrome with no-sandbox or NOT run it as root at all . 解决方案是在no-sandbox情况下运行chrome 或者根本不以root身份运行它 I created a user called dusk and under that Dusk will work with no problems. 我创建了一个名为dusk的用户,在Dusk下工作没有任何问题。

login as: dusk
dusk@192.168.56.70'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]$

For anyone else that's running into issues with Dusk in headless mode, give this a try: 对于那些在无头模式下遇到黄昏问题的人来说,试一试:

In DuskTestCase use the following driver function: DuskTestCase使用以下驱动程序函数:

/**
 * 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 :-) 对我有把戏:-)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM