如何在 Dusk 测试中 select 多个复选框

How to select multiple checkboxes in Dusk test

我正在将 VueJS 与 bootstrap-vue, and using Laravel Dusk 一起使用,我需要在使用复选框 select 每行的模态中测试 table。在这种特殊情况下,有多行带有复选框,我需要 select 表单中的所有复选框,然后提交表单。除了选中复选框外,我的测试在所有方面都可以很好地使用模态;无论我尝试什么,我都无法使用 check()(或 click())方法来检查比第一个更多的方法。我试过了

->check("input[type=checkbox]")

并使用 name

->check("input[name='my-custom-name']")

但我仍然只检查了第一项。基于 this,我尝试了

$checkboxes = $browser->driver->findElements(WebDriverBy::name('my-custom-name[]'));
for ($i = 0; $i <= count($checkboxes); $i++) {
    $checkboxes[0]->click();
}

但即便如此,也只会选中第一个复选框。 select table 中的所有复选框我需要做什么?

答案是首先,使用行索引将自定义 dusk 选择器添加到复选框:

<template #cell(selected)="row">
    <b-form-checkbox
        v-model="row.item.check"
        @input="rowCheckboxClick($event, row.index, row.item)"
        plain
        :dusk="'my-custom-selector-' + row.index"
    >
    </b-form-checkbox>
</template>

其次,在测试中使用选择器。

->whenAvailable(new PursuitModelRestoreDeletedModal(), function(Browser $browser) {
     $browser->waitForText('Click on the checkbox in the Select column')
         ->assertSee('My Modal Title')
         ->check('@my-custom-selector-0')
         ->check('@my-custom-selector-1')
         ->check('@my-custom-selector-2')
         ->check('@my-custom-selector-3')
         ->click('@ok-button');
     })

是的,如果使用循环而不是单独列出每个选择器,代码可能会更简洁一些,但这行得通。