【问题标题】:Testing ReCaptcha with Laravel Dusk使用 Laravel Dusk 测试 ReCaptcha
【发布时间】:2018-09-10 07:52:04
【问题描述】:

我在使用 Laravel Dusk 在表单上测试不可见的 ReCaptcha 时遇到了一个小问题。这种情况涉及的包是Invisible Recaptcha by Albertcht

我在/testsCreatesApplication.php 文件中有这个方法

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 一起使用?

谢谢

【问题讨论】:

    标签: php laravel recaptcha laravel-dusk invisible-recaptcha


    【解决方案1】:

    reCaptcha 通常在 iframe 中。 Dusk 无法识别 iframe 中的元素。但是,您可以使用方法 ->withinFrame('selector', function ($browser) {}); 并在 insideFrame 闭包中声明值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2019-08-02
      • 2019-08-11
      • 1970-01-01
      • 2019-12-22
      • 2020-01-16
      • 2018-07-18
      相关资源
      最近更新 更多