Laravel Dusk:Facebook\WebDriver\Exception\UnknownErrorException:未知错误:net :: ERR_CONNECTION_REFUSED

11

运行php artisan dusk时出现错误:

Facebook\WebDriver\Exception\UnknownErrorException: unknown error: net::ERR_CONNECTION_REFUSED
  (Session info: headless chrome=85.0.4183.83)

版本:

  • 操作系统:Windows 10 v1903构建18362.1016
  • Chrome浏览器:85.0.4183.83
  • Laravel框架:v6.18.37
  • Dusk测试工具:v5.11.0
  • Phpunit测试工具:v8.5.8

尝试过的解决方案:

  • 禁用防火墙
  • 将测试网站设置为使用localhost(原先为myapp.local)
  • 可以使用Chrome浏览器访问所有页面
  • 检查vendor/laravel/dusk/bin/chromedriver-win.exe文件是否可执行(-rwxr-xr-x)
  • php artisan route:clear
  • php artisan cache:clear
  • php artisan config:clear
  • composer dump-autoload
  • 在Google中搜索“Facebook\WebDriver\Exception\UnknownErrorException: unknown error: net::ERR_CONNECTION_REFUSED”

测试运行时,本地主机地址:9515似乎正在运行,当我在Chrome中尝试连接时,会得到以下响应:

{
    value: {
        error: "unknown command",
        message: "unknown command: unknown command: ",
        stacktrace: "Backtrace: Ordinal0 [0x0037D383+3134339] Ordinal0 [0x0026A171+2007409] Ordinal0 [0x0010AEE8+569064] Ordinal0 [0x000AD12C+184620] Ordinal0 [0x000ACF0A+184074] Ordinal0 [0x00081FD7+8151] Ordinal0 [0x00082496+9366] Ordinal0 [0x00082B40+11072] Ordinal0 [0x00280CD9+2100441] GetHandleVerifier [0x004EB75A+1396954] GetHandleVerifier [0x004EB3D9+1396057] GetHandleVerifier [0x004F7126+1444518] GetHandleVerifier [0x004EBCE8+1398376] Ordinal0 [0x00277F51+2064209] Ordinal0 [0x00081D35+7477] Ordinal0 [0x00081991+6545] GetHandleVerifier [0x006BF31C+3312796] BaseThreadInitThunk [0x76986359+25] RtlGetAppContainerNamedObjectPath [0x771D7C24+228] RtlGetAppContainerNamedObjectPath [0x771D7BF4+180] (No symbol) [0x00000000] ",
    }
}

DuskTestCase驱动程序:

/**
 * Create the RemoteWebDriver instance.
 *
 * @return \Facebook\WebDriver\Remote\RemoteWebDriver
 */
protected function driver()
{
    $options = (new ChromeOptions)->addArguments([
        '--disable-gpu',
        '--headless',
        '--window-size=1920,1080',
    ]);

    return RemoteWebDriver::create(
        'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
            ChromeOptions::CAPABILITY, $options
        )
    );
}

还有其他什么尝试的线索吗?或者还有其他人知道解决方法吗?

8个回答

17

我遇到了同样的问题,对于我来说有效的方法是在.env文件中设置APP_URL参数,如下:

APP_URL=http://127.0.0.1:8000

由于这是我用php artisan serve启动网站时使用的同一端口。

Laravel development server started: http://127.0.0.1:8000

我完全不知道为什么这个能工作,还有点不敢相信。 - buryo
我想Dusk需要使用正在提供服务的网站来运行浏览器测试。它不会运行自己的服务器,而是使用与您的应用程序相同的服务器。 - Coola
3
我的问题有点不同,但这是一个有用的线索!我正在Docker驱动的环境中运行我的测试,并且我需要在.env.testing中有APP_URL=http://nginx:8080(其中nginx是运行chromedriver的容器的名称),而在.env中需要APP_URL=http://localhost:8080。棘手的小问题;谢谢! - Ben Johnson
1
@BenJohnson 这正是我的问题,尝试了一切可能的方法,直到这个解决了它。 - Matthew Bradley
如果你正在Docker容器中运行测试,你需要使用 php artisan serve --host 0.0.0.0。https://stackoverflow.com/a/54022753/799588 - undefined

14

我想分享一下,希望能帮助到其他可能会遇到同样问题的人。

原来 Laravel Dusk 在执行 php artisan dusk 前需要我们先运行 php artisan serveERR_CONNECTION_REFUSED 错误是由于无法连接到应用程序本身的 http://localhost:8000 URL,因为它没有在运行。

这确实有道理,但我之前并不知道,而且文档也没有很清楚地说明(我不得不自己推断)。不过,ChromeDriver 会在执行时由 Dusk 自动启动。


这对我很有帮助,我也不明白为什么会这样,但它对我有效。 - Kamaro
我正在使用Sail作为我的开发环境。我还需要运行php artisan serve吗? - Marcus Christiansen
我同意。这在文档或错误中并不明显。关于Sail,我不使用它,所以不确定。我会假设是这样的。 - coder_uk
1
是的,你的回答提醒了我。我经常忘记这个问题,认为它更重要。 - Banik

1

在 Laravel 9 中,唯一帮助我的方法是在 .env.dusk.local 文件中设置 APP_URL=http://laravel.test


0

要解决这个错误,您需要将.env文件中的APP_URL参数更新为以下本地服务器URL

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:XZoWMB3aWom/V3iZy870VSQjMsBdGCHYdWbRuNb6aY0=
APP_DEBUG=true
APP_URL=http://127.0.0.1:8000 #(This can be url to your local environment)

0
我尝试在安装新的Laravel 8.77后运行dusk,但遇到了以下错误,并通过创建新的.env.dusk.local文件找到了解决方案。您需要根据当前环境创建.env.dusk.{environment}
在您新创建的env文件中,您需要通过创建虚拟主机来定义正确的URL,例如http://testing-laravel.local
There was 1 error:

1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\UnknownErrorException: unknown error: net::ERR_CONNECTION_REFUSED
  (Session info: headless chrome=96.0.4664.110)

0

对我来说,在设置了.env APP_ENV=development 并且保持 .env.dusk.development 也相同后,错误消失了。


0

按照以下步骤解决问题:

  1. 删除vendor文件夹和composer.lock文件
  2. 运行php composer.phar install
  3. 检查您当前的Chrome版本 - 您可以通过访问https://www.whatismybrowser.com/detect/what-version-of-chrome-do-i-have来检查它
  4. http://chromedriver.chromium.org/downloads下载与您当前Chrome版本匹配的Chrome WebDriver
  5. 手动从vendor\laravel\dusk\bin中删除旧的chromedriver-win.exe版本,并将您下载的版本放在那里。请注意,您需要重命名该文件。

完成第2步后,错误消息已更改,随之出现了剩余的步骤。


我遇到了相同的错误,尝试了上述方法,但出现问题仍未得到解决。我还尝试使用 php artisan optimize 清除缓存,但也没有帮助。 - Coola
@Coola 谢谢你的反馈。虽然它似乎有效,但我自己并不是很有信心,因此没有将其标记为答案。希望有人能找到解决方案。 :) - Trevor

0
就像听起来那么明显的一样,不要像我一样完全忘记在尝试本地运行Dusk测试之前启动开发服务器 - 如果测试运行的服务器没有启动,连接显然会被拒绝。无论您是使用XAMPP还是只是php artisan serve,请确保记得打开本地服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接