如何使用水豚检查表单字段是否预填充正确?

我有一个领域有一个适当的标签,我可以填写与水豚没有问题:

fill_in 'Your name', with: 'John'

我想在填写之前检查一下它的值,但是不能算出来。

如果我在 fill_in后面加上以下一行:

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

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

我错过了什么?

85669 次浏览

您可以使用 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"

另一个不错的解决办法是:

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

或者

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

分别。

也可以看看 参考文献

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

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

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")

我想知道如何做一些稍微不同的事情: 我想测试字段是否有 一些值(同时使用 水豚重新测试匹配器的能力,直到匹配)。事实证明,可以使用“过滤器块”来实现这一点:

expect(page).to have_field("field_name") { |field|
field.value.present?
}

如果字段是一个 id 为“ some _ field”的隐藏字段,那么可以使用

expect(find("input#somefield", :visible => false).value).to eq 'John'