You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Dusk v7.x与Github Actions(Linux)常见错误及解决方法

Laravel Dusk(7.x)配置问题及解决方法(PHP 8.0)

Dusk版本:7.x
PHP版本:8.0

问题1:执行php artisan dusk提示Chromedriver路径无效

RuntimeException: Invalid path to Chromedriver [/var/www/path/vendor/laravel/dusk/src/Chrome/../../bin/chromedriver-linux]. Make sure to install the Chromedriver first by running the dusk:chrome-driver command

解决方法:

方法一:修复文件权限

  • 进入项目目录,执行命令:
chmod -R 0755 vendor/laravel/dusk/bin/

方法二:重命名Chromedriver文件

  • 进入vendor/laravel/dusk/bin/目录
  • 将chromedriver-linux64重命名为chromedriver-linux

若问题仍存在,尝试以下补充操作:

补充方法一:指定Chromedriver端口

在DuskTestCase.php的driver方法中,为RemoteWebDriver指定端口(默认9515),示例代码如下:

return RemoteWebDriver::create(
    env('DUSK_URL') && env('DUSK_PORT') ? env('DUSK_URL').':'.env('DUSK_PORT') : 'http://127.0.0.1:9515',
    // 其余代码保持不变
);
补充方法二:添加--no-sandbox参数

在DuskTestCase.php的driver方法中,为ChromeOptions添加--no-sandbox参数:

protected function driver(): RemoteWebDriver
{
    $options = (new ChromeOptions)->addArguments(collect([
        $this->shouldStartMaximized() ? '--start-maximized' : '--window-size=1920,1080',
    ])->unless($this->hasHeadlessDisabled(), function (Collection $items) {
        return $items->merge([
            '--disable-gpu',
            '--headless=new',
            '--no-sandbox' // 新增该参数
        ]);
    })->all());

    return RemoteWebDriver::create(
        env('DUSK_URL') && env('DUSK_PORT') ? env('DUSK_URL').':'.env('DUSK_PORT') : 'http://127.0.0.1:9515',
        DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )
    );
}

问题2:执行php artisan dusk提示Curl会话请求失败

Facebook\WebDriver\Exception\Internal\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"capabilities":{"firstMatch":[{"browserName":"chrome","goog:chromeOptions":{"args":["--window-size=1920,1080"]}}]},"desiredCapabilities":{"browserName":"chrome","platform":"ANY","goog:chromeOptions":{"args":["--window-size=1920,1080"]}}}}

解决方法:

该错误是因为Chrome Driver未启动,按以下步骤处理:

步骤1:启动项目内的Chrome Driver

  • 进入项目根目录,执行命令:
./vendor/laravel/dusk/bin/chromedriver-linux/chromedriver --port=9515

执行后终端会显示Chrome Driver启动成功的信息,保持该终端窗口开启。

步骤2:手动安装Chrome Driver(若步骤1无效)

执行以下命令安装适配Linux的Chrome Driver:

LATEST_CHROMEDRIVER_VERSION=$(curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
wget -O chromedriver.zip https://chromedriver.storage.googleapis.com/$LATEST_CHROMEDRIVER_VERSION/chromedriver_linux64.zip
unzip chromedriver.zip
sudo mv chromedriver /usr/local/bin/
sudo chmod +x /usr/local/bin/chromedriver
rm chromedriver.zip

安装完成后,执行以下命令启动:

chromedriver --port=9515

注意:需安装Linux版Chrome浏览器,且Chrome与ChromeDriver版本需保持兼容。

步骤3:启动Laravel服务并配置.env

保持Chrome Driver终端开启,新建终端执行:

php artisan serve

确保.env文件包含以下关键配置:

APP_ENV=local
APP_URL=http://localhost:8000
SESSION_DRIVER=file
SESSION_LIFETIME=120

注意:使用->loginAs($user)时,SESSION_DRIVER配置至关重要,可通过->assertAuthenticated()验证登录状态;若使用file驱动,需确保应用对存储目录有合适的读写权限。


Github Actions 流水线配置示例

以下是可成功运行Dusk测试的Github Actions配置代码:

- name: Run Tests
  env:
    DB_DATABASE: db_test
    DB_USERNAME: root
    DB_PASSWORD: root
  run: |
    php artisan key:generate --force
    php artisan test

- name: Install Dusk
  run: |
    php artisan dusk:install && rm tests/Browser/ExampleTest.php

- name: Permissions for Chrome Driver
  run: |
    chmod -R 0755 vendor/laravel/dusk/bin/

- name: Renaming Chrome chromedriver-linux64 to chromedriver-linux
  run: |
    mv vendor/laravel/dusk/bin/chromedriver-linux64 vendor/laravel/dusk/bin/chromedriver-linux

- name: Detect Chrome Driver
  run: |
    php artisan dusk:chrome-driver --detect

- name: Start Chrome Driver
  run: ./vendor/laravel/dusk/bin/chromedriver-linux/chromedriver --port=9515 &

- name: Run Laravel Server
  run: |
    php artisan serve --no-reload &

- name: Wait for Server
  run: sleep 5

- name: Run Dusk Tests
  env:
    APP_URL: http://127.0.0.1:8000
  run: |
    php artisan dusk --testdox --without-tty --ansi

流水线调试步骤

在Run Dusk Tests步骤前添加日志清理:

- name: Clear Laravel Logs
  run: | 
    echo "" > storage/logs/laravel.log
    cat storage/logs/laravel.log

在Run Dusk Tests步骤后添加失败日志捕获:

- name: Capture Logs if Tests Fail
  if: failure()
  run: cat storage/logs/laravel.log

内容的提问来源于stack exchange,提问作者Sublan Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:43:11