水豚无法检测到元素,即使它在页面上可见

Capybara cannot detect element even though it is visible on page

我正在使用 Capybara 手动填写页面,但是我 运行 遇到了问题。

当它尝试执行此行时(我也尝试将可见设置为 false):

find(:css, "[value='Laundry In Building']", visible: true).set(true)

出现以下错误:

Unable to find css "[value='Laundry In Building']"

这很令人困惑,因为当测试为 运行 时,我在浏览器中看到了该字段。此外,当我输出 page.body 时,我得到以下内容:

<div class="listing-edit-cb-item">
  <input class="cb" id="building_features_3" name="features[]"value="Laundry In Building" type="checkbox" />
  <label for="building_features_3">
    <span class="cb"></span>
    <span style="width: 200px; display: inline-block; font-size: 0.90em;">Laundry In Building</span>
  </label>
</div>

为什么 Capybara 没有 table 检测复选框元素?

您没有显示应用到复选框的 css,但我敢打赌它实际上不是您在页面上看到的复选框。使用您的浏览器开发控制台查看页面上实际显示的内容,它可能使用 span.cb 上的伪元素将复选框替换为图像,以便它们在多个浏览器中看起来相同。如果您使用的是最新版本的 Capybara,您可以

check('Laundry In Building', allow_label_click: true)  # found by labels text

check(option: 'Laundry In Building', allow_label_click: true) # found by checkbox inputs value property

这将通过单击可见标签而不是隐藏的实际输入来选中该框。如果使用旧版本,您需要找到标签并单击它。像

find(:css, 'label', text: 'Laundry In Building').click