Laravel Dusk error: Failed to connect to localhost port 9515: Connection refused

后端 未结 6 956
粉色の甜心
粉色の甜心 2021-02-05 01:16

As the title says, I\'ve go a clean install of Laravel 5.4 and the latest Homestead (1.0.1). However, when I run a simple Dusk test case I get the following error:

相关标签:
6条回答
  • 2021-02-05 01:18

    I had this issue today and the solution is on Laracasts.

    Here's a copy.

    # 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
    
    # Once all this has run through, you need to fire up xvfb on your homestead box. If you’re planning to # do this on a regular basis, you’ll want to get this setup on boot, but for the sake of testing things out:
    Xvfb -ac :0 -screen 0 1280x1024x16 &
    
    0 讨论(0)
  • 2021-02-05 01:30

    Create a customDuskCommand

    namespace App\Console\Commands;
    
    use Symfony\Component\Process\Process;
    
    class DuskCommand extends \Laravel\Dusk\Console\DuskCommand {
    
        public function handle() {
            $xvfb = (new Process(['/usr/bin/Xvfb', '-ac', ':0', '-screen', '0', '1280x1024x16']))
                    ->setTimeout(null);
    
            $xvfb->start();
    
            try {
                parent::handle();
            } finally {
                $xvfb->stop();
            }
    
            return;
        }
    
    }
    

    Thanks to https://stackoverflow.com/a/44322930/470749. It was outdated and didn't work, so I'm providing an updated answer that works.


    UPDATE:

    I personally don't follow this approach anymore. After I deployed to production, I got this error: E_ERROR: Class 'Laravel\Dusk\Console\DuskCommand' not found because I'd forgotten that my composer.json only installed Dusk in the dev environment rather than also in production. If you adhere to the principle that "test code" shouldn't be deployed to production, then this approach of writing a custom class that extends \Laravel\Dusk\Console\DuskCommand probably is not for you (since the DuskCommand dependency won't exist in production).

    I will leave this answer here anyway since it's hopefully a valuable warning to people. Please comment if you think I should delete it instead. By the way, Jonas Staudenmeir tends to have great answers, so this looks interesting as an alternative.

    0 讨论(0)
  • 2021-02-05 01:31

    On Ubuntu Linux 16.04, I got this to work:

    Install Chromium & dependencies for headless testing

    sudo apt-get -y install chromium-browser xvfb gtk2-engines-pixbuf xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable imagemagick x11-apps

    Create a customDuskCommand

    Which extends the original, with this handle method:

    public function handle()
    {
        $xvfb = (new ProcessBuilder())
            ->setTimeout(null)
            ->setPrefix('/usr/bin/Xvfb')
            ->setArguments(['-ac',  ':0', '-screen', '0', '1280x1024x16'])
            ->getProcess();
    
        $xvfb->start();
    
        try {
            parent::handle();
        } finally {
            $xvfb->stop();
        }
    
        return;
    }
    

    This will start Xvfb for headless testing before executing the tests and stop the process after testing completes.

    Edit: And make sure vendor/laravel/dusk/bin/chromedriver-linux is executable.

    0 讨论(0)
  • 2021-02-05 01:33

    With the latest laravel/homestead box v.6.0.0 it's working out of the box

    https://app.vagrantup.com/laravel/boxes/homestead

    0 讨论(0)
  • 2021-02-05 01:36

    This should help you download the latest version of chrome driver and unpack it properly.

    LATEST_VERSION=$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE) && wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.co /$LATEST_VERSION/chromedriver_linux64.zip && sudo unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/;
    
    0 讨论(0)
  • 2021-02-05 01:44

    It appears your chrome-driver installation is broken.

    You can try to install it from scratch

    CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
    
    wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
    unzip ~/chromedriver_linux64.zip -d ~/
    rm ~/chromedriver_linux64.zip
    sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
    sudo chown root:root /usr/local/bin/chromedriver
    sudo chmod 0755 /usr/local/bin/chromedriver
    
    0 讨论(0)
提交回复
热议问题