水豚无法检测到元素,即使它在页面上可见
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
我正在使用 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