【问题标题】:Laravel Dusk error: Failed to connect to localhost port 9515: Connection refusedLaravel Dusk 错误:无法连接到 localhost 端口 9515:连接被拒绝
【发布时间】:2017-06-21 18:37:34
【问题描述】:

正如标题所说,我已经全新安装了 Laravel 5.4 和最新的 Homestead (1.0.1)。但是,当我运行一个简单的 Dusk 测试用例时,我收到以下错误:

无法连接到 localhost 端口 9515:连接被拒绝

有人知道如何处理吗?我尝试将端口更改为 8888 等其他名称,但无济于事。

编辑: 我已经能够更深入地挖掘并发现chromedriver 可执行文件实际上不是可执行文件(chmod)。现在我已经修复了当我手动尝试运行它时出现此错误的问题。

./chromedriver:加载共享库时出错:libnss3.so:无法打开共享对象文件:没有这样的文件或目录

【问题讨论】:

  • 对我来说,修改vendor/laravel/dusk/bin/chromedriver-linux 中的可执行文件就足够了。还有一个 macOS chromedriver-linux 和 windows chromedriver-win.exe 版本。
  • 这里是关于这个问题的讨论。 github.com/laravel/dusk/issues/10
  • 您是在服务器或 Homestead 中通过 SSH 运行命令 php artisan dusk 吗?您需要chrome browser 来运行浏览器测试,请尝试在主机操作系统中运行命令。
  • sudo apt-get install libnss3-dev

标签: php laravel vagrant virtualbox homestead


【解决方案1】:

0 毫秒后无法连接到 localhost 端口 9515:连接被拒绝

解决方案:

php artisan dusk:install
php artisan dusk:chrome-driver 65

【讨论】:

    【解决方案2】:

    对于那些在 Mac 上寻找解决方案的人,我只需要重新启动 Chrome。是的,Chrome,浏览器。看来这是一个待更新的更新(它在右上角说)。

    重新启动它,然后再启动 chromedriver,一切正常

    【讨论】:

    • 它需要完全重新启动,但有效。
    【解决方案3】:

    创建一个 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;
        }
    
    }
    

    感谢https://stackoverflow.com/a/44322930/470749。它已经过时并且不起作用,因此我提供了一个有效的更新答案。


    更新:

    我个人不再采用这种方法。在我部署到生产环境后,我得到了这个错误:E_ERROR: Class 'Laravel\Dusk\Console\DuskCommand' not found,因为我忘记了我的composer.json 只在开发环境中安装了 Dusk,而不是在生产环境中。如果您坚持不应将“测试代码”部署到生产环境的原则,那么这种编写扩展 \Laravel\Dusk\Console\DuskCommand 的自定义类的方法可能不适合您(因为生产环境中不存在 DuskCommand 依赖项)。

    无论如何我都会在这里留下这个答案,因为它希望对人们来说是一个有价值的警告。如果您认为我应该删除它,请发表评论。顺便说一句,Jonas Staudenmeir 往往有很好的答案,所以this looks interesting as an alternative

    【讨论】:

      【解决方案4】:

      我今天遇到了这个问题,解决方案在Laracasts.

      这是一个副本。

      # 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 &
      

      【讨论】:

        【解决方案5】:

        这应该可以帮助您下​​载最新版本的 chrome 驱动程序并正确解压。

        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/;
        

        【讨论】:

          【解决方案6】:

          您的 chrome 驱动程序安装似乎已损坏。

          您可以尝试从头开始安装它

          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
          

          【讨论】:

            【解决方案7】:

            使用最新的 laravel/homestead box v.6.0.0,它开箱即用

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

            【讨论】:

              【解决方案8】:

              在 Ubuntu Linux 16.04 上,我得到了这个工作:

              安装 Chromium 和依赖项以进行无头测试

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

              创建自定义DuskCommand

              使用 handle 方法扩展了原始版本:

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

              这将在执行测试之前启动 Xvfb 进行无头测试,并在测试完成后停止进程。

              编辑:并确保vendor/laravel/dusk/bin/chromedriver-linux 是可执行的。

              【讨论】:

                猜你喜欢
                • 2019-10-11
                • 1970-01-01
                • 1970-01-01
                • 2020-11-20
                • 2017-09-08
                • 2019-07-29
                • 2019-01-07
                • 2017-11-09
                • 2021-09-08
                相关资源
                最近更新 更多