我有一个带有适当标签的字段,我可以用水豚填写没有问题:
fill_in 'Your name', with: 'John'
我想在填写之前检查它的值,但无法弄明白。
如果我在fill_in
后面添加以下行:
find_field('Your name').should have_content('John')
该测试失败,尽管之前的填充工作正如我通过保存页面验证的那样。
我错过了什么?
答案 0 :(得分:283)
另一个漂亮的解决方案是:
page.should have_field('Your name', with: 'John')
或
expect(page).to have_field('Your name', with: 'John')
分别
另见reference。
注意:对于已停用的输入,您需要添加选项disabled: true
。
答案 1 :(得分:172)
您可以使用 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"
答案 2 :(得分:1)
如果您特别想测试占位符,请使用:
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")
答案 3 :(得分:0)
我想知道如何做一些稍微不同的事情:我想测试该字段是否具有某些值(同时使用Capybara's ability to re-test the matcher until it matches)。事实证明,可以使用&#34;过滤块&#34;这样做:
expect(page).to have_field("field_name") { |field|
field.value.present?
}
答案 4 :(得分:0)
如果该字段是ID为“ some_field”的隐藏字段,则可以使用
expect(find("input#somefield", :visible => false).value).to eq 'John'