Laravel Dusk:元素在点(x,y)处不可点击。其他元素将收到点击

时间:2018-01-02 06:53:18

标签: php laravel-5.5 laravel-dusk laravel-dusk2

我正在尝试使用laravel Dusk复选复选框,其中包含其他可点击的链接,例如Terms of ServicePrivacy Policy Screenshot of the checkbox

当我尝试在我的测试中选中此复选框时,我收到以下错误

Element is not clickable at point (466, 438). Other element would receive the click: <label class="mt-checkbox mt-checkbox-outline">...</label>

这就是我想要做的事情

public function testRegister()
{
    $template = factory(User::class)->make();

    $this->browse(function (Browser $browser) use ($template) {
        $browser
            ->visit(new Register)
            ->type('name', $template->name->full)
            ->type('phone', $template->phone)
            ->type('email', strtoupper($template->email))
            ->type('password', 'dummy-pass')
            ->check('agree')
            ->press('Create Account')
            ->assertRouteIs('dashboard')
            ->assertAuthenticated();
    });

    $this->assertDatabaseHas('users', [
        'email' => $template->email,
    ]);
}

我尝试使用

最大化并滚动浏览器
$browser->maximize();
$browser->driver->executeScript('window.scrollTo(0, 400);');

除了使用check方法之外,我还尝试使用click方法和按钮选择器

$browser->click('input#button-selector');

我找不到解决这个问题的方法。有什么方法可以解决这个问题吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我使用var选择器而非复选框名称修复了此问题。例如,对于我的问题,这就是我对我的测试用例所做的事情。

outer label

在我的public function testRegister() { $template = factory(User::class)->make(); $this->browse(function (Browser $browser) use ($template) { $browser ->visit(new Register) ->type('name', $template->name->full) ->type('phone', $template->phone) ->type('email', strtoupper($template->email)) ->type('password', 'dummy-pass') ->check('@agree') ->press('Create Account') ->assertRouteIs('dashboard') ->assertAuthenticated(); }); $this->assertDatabaseHas('users', [ 'email' => $template->email, ]); } 页面中,我在Register方法中注册了agree选择器,如下所示

elements

它确实通过使用复选框的外部标签选择器解决了我的问题。我希望这将有助于将来的某些人。

答案 1 :(得分:0)

在我的情况下,它不起作用,因为我有两个具有相同元素的模态窗口。