159

我有一个带有适当标签的字段,我可以毫无问题地用 capybara 填写:

fill_in 'Your name', with: 'John'

我想在填写之前检查它的值,但无法弄清楚。

如果我在fill_in以下行之后添加:

find_field('Your name').should have_content('John')

该测试失败,尽管之前的填充工作正如我通过保存页面验证的那样。

我错过了什么?

4

5 回答 5

340

另一个漂亮的解决方案是:

page.should have_field('Your name', with: 'John')

或者

expect(page).to have_field('Your name', with: 'John')

分别。

另请参阅参考资料

注意:对于禁用的输入,您需要添加 option disabled: true

于 2013-05-16T10:11:50.597 回答
189

您可以使用xpath 查询来检查是否存在input具有特定值的元素(例如“John”):

expect(page).to have_xpath("//input[@value='John']")

有关详细信息,请参阅http://www.w3schools.com/xpath/xpath_syntax.asp

对于也许更漂亮的方式:

expect(find_field('Your name').value).to eq 'John'

编辑:现在我可能会使用 have_selector

expect(page).to have_selector("input[value='John']")

如果你正在使用页面对象模式(你应该是!)

class MyPage < SitePrism::Page
  element :my_field, "input#my_id"

  def has_secret_value?(value)
    my_field.value == value
  end
end

my_page = MyPage.new

expect(my_page).to have_secret_value "foo"
于 2012-05-08T17:58:42.277 回答
2

如果您特别想测试占位符,请使用:

page.should have_field("some_field_name", placeholder: "Some Placeholder")

或者:

expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")

如果要测试用户输入的值:

page.should have_field("some_field_name", with: "Some Entered Value")
于 2016-10-21T21:47:11.630 回答
0

如果该字段是 id 为“some_field”的隐藏字段,那么您可以使用

expect(find("input#somefield", :visible => false).value).to eq 'John'
于 2020-09-27T20:54:14.523 回答
0

我想知道如何做一些稍微不同的事情:我想测​​试该字段是否有一些价值(同时利用Capybara 重新测试匹配器直到匹配的能力)。事实证明,可以使用“过滤器块”来执行此操作:

expect(page).to have_field("field_name") { |field|
  field.value.present?
}
于 2017-03-15T09:49:24.053 回答