【问题标题】:Capybara have_selector is not working on checkboxCapybara have_selector 没有在复选框上工作
【发布时间】:2015-08-19 15:30:23
【问题描述】:

在我看来,我有一个复选框

<input type="checkbox" id="modal-checkbox" class="painter-modal-checkbox" data-reactid=".1.1:1.0.0">

在我的水豚代码中,我正在尝试使用 have_selector 方法

expect(page).to have_selector("#modal-checkbox")

当我跟踪页面时,这失败了

print page.html

我可以确认我的html代码在那里,为什么这个测试失败了。

【问题讨论】:

    标签: rspec capybara


    【解决方案1】:

    这通常是因为该字段实际上是不可见的,因为它是通过 CSS 隐藏的。对于复选框,这通常是因为设计要求使用标签来显示复选框的选定状态,而实际的复选框是隐藏的。要检查可见性是否是问题,您可以将 visible: false 传递给 have_selector,但是 99% 的情况下您不应该检查不可见的项目,因为用户无法看到它们或与它们交互

    【讨论】:

    • 那么应该用什么来检查隐藏标签呢?我在 表单字段中遇到了这个问题,我想在我的视图测试中检查(不是集成或功能测试——而是在我需要确保生成正确字段的地方查看测试,可见或不是)。
    • 啊,过了一会儿我找到了答案:在 have_selector 调用中添加“visible: false”参数。例如:expect(rendered).to have_selector('input[type="hidden"]', visible: false)
    • @GrantNeufeld 正确-如答案中所述-但是检查是否存在不可见元素确实是测试中的不良代码气味。如果他们不可见或不在页面代码中,对用户有什么影响?您应该测试使它们可见或依赖于它们在页面上隐藏的行为,而不是测试隐藏元素的存在。
    • 除了一些不可见的元素确实会对用户产生影响之外: • 隐藏的input[name="_method"] 决定了当用户与表单交互时Rails 将执行的操作。 • 一些隐藏的元数据将由非人类用户处理(例如嵌入微格式时)。 • 残障人士的辅助设备可能会使用一些隐藏元素。
    • @GrantNeufeld 隐藏的input[name="_method"] 应该在功能测试中进行测试,方法是提交表单并确保应用程序执行正确的操作,而不是检查隐藏输入字段的存在。对于微格式和辅助标签,如果您无法在浏览器中测试所需的结果,那么它们更适合在视图规范而不是功能规范中进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多