Laravel Dusk 在访问某些页面时抛出 Curl POST 错误,即使页面请求是 GET 类型

问题描述

我有一个项目在 Laravel 6.0.4、Windows 10 64Bit、PHP 7.4.8 上成功运行。

我已经设置了 Dusk 和 Chrome 驱动程序,并确保它们的版本兼容,而且 Chrome 是最新版本并与 Chrome 驱动程序兼容:

laravel/dusk                          v6.9.1   Laravel Dusk provides simple end-to-end testing and browser automat...
staudenmeir/dusk-updater              v1.2.2   Updater for Laravel Dusk ChromeDriver binaries

Chrome version 87.0.4280.88 detected.
No update necessary,your ChromeDriver binary is already on version 87.0.4280.88.

此外,当我对一些内容相对简单且不涉及任何控制器/视图文件中的任何 SQL 查询执行的页面进行测试时,打开正常,Google 登录也正常工作。>

但是当我在登录后访问一个特定页面时,它是 http://localhost:8000/admin/campaign-manager,它抛出这个错误:

有 1 个错误:

1) Tests\Browser\CampaingManagerPathsExistTest::mainPathTest
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session/0c3e1f2ac398d7c19975422219d6fe4a/url with params: {"url":"http:\/\/loca
lhost:8000\/admin\/campaign-manager"}

Operation timed out after 30000 milliseconds with 0 bytes received

C:\lmt2\vendor\php-webdriver\webdriver\lib\Remote\HttpCommandExecutor.php:332
C:\lmt2\vendor\php-webdriver\webdriver\lib\Remote\RemoteWebDriver.php:612
C:\lmt2\vendor\php-webdriver\webdriver\lib\Remote\RemoteExecuteMethod.php:27
C:\lmt2\vendor\php-webdriver\webdriver\lib\WebDriverNavigation.php:41
C:\lmt2\vendor\laravel\dusk\src\Browser.php:153
C:\lmt2\tests\Browser\CampaingManagerPathsExistTest.php:41
C:\lmt2\vendor\laravel\dusk\src\Concerns\ProvidesBrowser.php:68
C:\lmt2\tests\Browser\CampaingManagerPathsExistTest.php:42

ERRORS!
Tests: 1,Assertions: 1,Errors: 1.

以下是我编写的测试代码,它适用于 /search/admin/[otherpage] 等其他页面,但不适用于上述页面:

<?php

namespace Tests\Browser;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class CampaingManagerPathsExistTest extends DuskTestCase
{
    /**
     * <ProjectName> Login Test
     * @return void
     */
    protected function loginRedirectCheck($browser)
    {
        $browser->maximize();
        $browser->visit('https://accounts.google.com/o/oauth2/auth?client_id=404959754299-7qdrdf5i7um4p7gle2f0t6u55k4ojj1m.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fauth%2Fgoogle%2Fcallback&scope=openid+profile+email&response_type=code&state=tUFtLPv61f5Av05L7CJ1sO3mEVHuJkgQQvJIH1Fd&flowName=GeneralOAuthFlow')
            ->type('#identifierId','<GoogleEmailID>')
            ->click('#identifierNext')
            ->waitFor('input[name=password]')
            ->type('input[name=password]','<GooglePassword>')
            ->click('#passwordNext')
            ->waitForLocation('/search',30)
            ->assertPathIs('/search');
    }

    /**
     * @test
     * @group cm-main-path-check
     *
     * Campaign Manager Path exists test
     * @return void
     */
    public function mainPathTest()
    {
        $this->browse(function (Browser $browser) {
            $this->loginRedirectCheck($browser);
            // $browser->visit('http://localhost:8000/search')->assertTitle('Search page title');
            // $browser->visit('http://localhost:8000/admin/clients')->assertTitle('Clients Page title');
            $browser->visit('http://localhost:8000/admin/campaign-manager')->assertTitle('Dashboard | Campaign Manager');
        });
    }
}

正如我之前提到的,我访问时的其他 URL(CampaingManagerPathsExistTest 中第二个方法中的注释代码)工作正常,但是这个 /admin/campaign-manager 页面涉及在它的 Controller 和查看文件,自动化测试在浏览器中访问页面后总是抛出上述错误(我开启了non-headless chrome实例)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)