我有一个包含当前日期的隐藏字段的表单。
我试图弄清楚如何编写一个水豚取景器:
- 检查该字段是否存在
- 检查字段的值
Capybara可以做到这一点吗?
这样做:
find("#id_of_hidden_input", :visible => false).value
您还可以指示 Capybara 不要忽略您spec_helper.rb
或等效项中的全局隐藏元素。可以覆盖默认行为:
# default behavior for hidden elements
# Capybara.ignore_hidden_elements = false
# find all elements (hidden or visible)
page.all(".articles .article[id='foo']")
# find visible elements only (overwrite the standard behavior just for this query)
page.all(".articles .article[id='foo']", :visible => true)
# changing the default behavior (e.g. in your features/support/env.rb file)
Capybara.ignore_hidden_elements = true
# now the query just finds visible nodes by default
page.all(".articles .article[id='foo']")
# but you can change the default behaviour by passing the :visible option again
page.all(".articles .article[id='foo']", :visible => false)
取自这篇文章的例子。
匹配器has_field?
也适用于隐藏字段。不需要在这种情况下find
或all
在这种情况下做奇怪的体操。
page.has_field? "label of the field", type: :hidden, with: "field value"
page.has_field? "id_of_the_field", type: :hidden, with: "field value"
这里的关键是将:type
选项设置为:hidden
显式。
为什么要使用带有隐藏字段的标签?如果您使用的是 js 库,例如 flatpickr,这会派上用场,它可以隐藏您的原始文本字段以隐藏它。不将您的行为测试与特定标记耦合总是一件好事。
它很简单,您可以通过使用find_by_css
或使用 xpath 来做到这一点,如下所示
page.find_by_css('#foo .bar a') #foo is the id the foo has .bar class
page.find('/table/tbody/tr[3]') #path of the element we want to find