Тестирование recaptcha с laravel dusk

У меня небольшая проблема с тестированием невидимой ReCaptcha в форме с использованием Laravel Dusk. В этой ситуации участвует пакет Невидимая рекапча Альберта.

У меня этот метод внутри файла CreatesApplication.php в /tests

protected function withoutRecaptcha() : void
{
    InvisibleReCaptcha::shouldReceive("verifyRequest")
        ->andReturnTrue();

    InvisibleReCaptcha::shouldReceive("verifyResponse")
        ->once()
        ->andReturnTrue();
}

Это хорошо работает для теста функций, потому что мне нужно только нажимать API, и я могу игнорировать ввод g-recaptcha-response из почтового запроса.

Но если я хочу протестировать саму форму, используя систему тестирования браузера, такую ​​как Laravel Dusk, конечно, этого недостаточно.

Мой текущий метод Dusk следующий.

 public function a_guest_can_fill_the_registration_form()
 {
     $this->withoutRecaptcha();

     $this->browse(function (Browser $browser) {
         $browser->maximize()
            ->visit(new Register())
            ->assertPresent("input[name=g-recaptcha-response]")
            ->fillFormWithRandomData()
            ->submitForm()
            ->waitForReload()
            ->assertVisible(".alert.alert-success");
    });
 }

Здесь все очень просто: я вызываю форму регистрации, заполняю данные, отправляю их и проверяю, появляется ли предупреждение. В настоящее время это не работает, и я получаю такую ​​ошибку:

There was 1 failure:

1) Tests\Browser\RegisterTest::a_guest_can_fill_the_registration_form
Element [body input[name=g-recaptcha-response]] is not present.
Failed asserting that false is true.

/app/vendor/laravel/dusk/src/Concerns/MakesAssertions.php:806
/app/vendor/laravel/dusk/src/Concerns/ProvidesBrowser.php:67

Итак, проблема ясна: во время теста ввод ReCaptcha не отображается, поэтому невозможно попасть в него или даже не настоящие.

Есть ли способ визуализировать поддельную ReCaptcha, чтобы она работала с Laravel Dusk?

Спасибо

2
0
925
1

Ответы 1

reCaptcha обычно внутри iframe. Dusk не может распознать элемент внутри iframe. Однако вы можете использовать метод ->withinFrame('selector', function ($browser) {}); и подтвердить значение внутри закрытия кадра.

Другие вопросы по теме