Запуск Laravel Dusk на безголовой (без графического интерфейса) машине

После недавнего анонса Laravel 5.4 я решил попробовать. Как и Ozymandias-X на Reddit, я также был разочарован Это.

Моя установка

  • Windows 10 в качестве хоста;
  • CentOS 7 в качестве гостя (без установки GUI, без Vagrant)
  • Общая папка с Virtual Box.

Если я просто включу свою машину и запущу 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.

Я пытался следовать статье Майка Смита, но выполнял ./vendor/laravel/dusk/bin/chromedriver-linux вручную и закомментирование static::startChromeDriver(); из DuskTestCase совсем не помогло. Я также попытался установить Xvfb и запустить его на порту: 0 вручную, и происходит то же самое. Наконец, я попытался запустить драйвер вручную из /usr/lib64/chromium-browser/chromedriver (2.25) и никаких изменений.

Я пытаюсь избежать запуска этого из Windows напрямую, потому что я намерен иметь процесс CI с Linux без головы / без графического интерфейса, и мне придется настроить то же самое, что я пытаюсь сделать прямо сейчас.


person Marco Aurélio Deleu    schedule 11.02.2017    source источник
comment
Stack Overflow — это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. раздел О каких темах я могу задать здесь в Справочном центре. Возможно, Суперпользователь или Unix & Linux Stack Exchange лучше спросить. См. также раздел Где размещать вопросы о Dev Ops?   -  person jww    schedule 11.02.2017
comment
@jww Верхний ответ предоставленной вами метассылки заканчивается вопросом DevOps, который должен быть разрешен в StackOverflow. Очевидно, что речь идет о широко известном PHP Framework, обсуждаемом на SO каждый день, и он направлен на решение проблемы написания TDD с таким Framework (и его новыми функциями). Один из вопросов, который больше всего помог моему представителю, также касается не исправления строк кода, а скорее настройки среды PHP, предназначенной для преодоления проблем, с которыми мы ежедневно сталкиваемся в нашей работе ( stackoverflow.com/questions/35223926/)   -  person Marco Aurélio Deleu    schedule 11.02.2017


Ответы (3)


Примечание. Это не принятый ответ, потому что настоящая проблема связана с Cent OS. Этот ответ является всего лишь предложением, пока у нас нет решения для RedHat.

Проблема с Cent OS. Делая все, что я делал в дистрибутиве Ubuntu, все работало легко. Это сообщение в среде основано на этой сути достаточно, чтобы заинтересовать любого. Я собираюсь выделить некоторые моменты здесь на случай, если ссылка сломается.

Зависимости

# 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

Запуск Xvfb

Xvfb -ac :0 -screen 0 1280x1024x16 &

Готово

person Marco Aurélio Deleu    schedule 18.02.2017

Решение состоит в том, чтобы либо запустить Chrome с no-sandbox , либо вообще НЕ запускать его с правами root. Я создал пользователя с именем dusk, и под ним Dusk будет работать без проблем.

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]$
person Marco Aurélio Deleu    schedule 06.03.2017

Для всех, кто сталкивается с проблемами с Dusk в безголовом режиме, попробуйте это:

В 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)
    );
}

Сделал трюк для меня :-)

person Stan Smulders    schedule 19.07.2018
comment
Спасибо, acceptInsecureCerts помог с виртуальной машиной Centos7. - person Johannes Maria Frank; 04.09.2018