在最后一天左右,我开始看到我的 Laravel Dusk 测试在我的 CI/CD 环境中失败(GitHub Actions)。
突然,运行一直运行良好的命令:
php artisan dusk:chrome-driver `/opt/google/chrome/chrome --version | cut -d " " -f3 | cut -d "." -f1`
..失败并出现以下错误:
file_get_contents(https://chromedriver.storage.googleapis.com/LATEST_RELEASE_116):无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到
尝试通过强制版本 114 来解决此问题:
php artisan install:chrome-driver 114
...失败并出现以下错误:
Facebook\WebDriver\Exception\SessionNotCreatedException:会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 114
我怎样才能解决这个问题并让我的测试再次开始通过?
此问题在 上游详细讨论 - 简而言之,404 是由 Google 从版本 115 开始更改 Chrome 二进制文件的源 URL 导致的。
特别是对于 Laravel Dusk,这似乎已经在这个 Dusk 问题中得到了解决,所以理论上正确解决这个问题所需的只是
composer require laravel/dusk --with-all-dependencies
,但至少在我的情况下,这会更新很多 的依赖关系,似乎很可能会破坏我的应用程序。我曾询问过这个问题对于旧版 Laravel 应用程序(我的例子是 Laravel 8)最好的做法是什么,但同时将 Chrome/Chromium 浏览器和 Chrome 驱动程序降级到 v114 应该是一个足够好的解决方法.
这说起来容易做起来难,我花了一天多的时间才弄清楚如何在 GitHub Actions 上成功完成此操作,但是将以下步骤添加到您的工作流程文件应该是让您的构建再次运行所需的全部内容:
- name: Downgrade Chrome browser to v114
uses: browser-actions/setup-chrome@latest
with:
chrome-version: 1135561 # Last commit number for Chrome v114
- run: CHROME_BIN=$(which chrome)
- name: Downgrade Chrome driver to v114
run: php artisan dusk:chrome-driver 114