I have a field with a proper label that I can fill in with capybara without a problem:
fill_in \'Your name\', with: \'John\'
I\'d like to check
If the field is a hidden one with an id of 'some_field', then you can use
expect(find("input#somefield", :visible => false).value).to eq 'John'
I was wondering how to do something slightly different: I wanted to test whether the field had some value (while making use of Capybara's ability to re-test the matcher until it matches). It turns out that it's possible to use a "filter block" to do this:
expect(page).to have_field("field_name") { |field|
field.value.present?
}
If you specifically want to test for a placeholder, use:
page.should have_field("some_field_name", placeholder: "Some Placeholder")
or:
expect(page).to have_field("some_field_name", placeholder: "Some Placeholder")
If you want to test the user-entered value:
page.should have_field("some_field_name", with: "Some Entered Value")
Another pretty solution would be:
page.should have_field('Your name', with: 'John')
or
expect(page).to have_field('Your name', with: 'John')
respectively.
Also see the reference.
Note: for disabled inputs, you'll need to add the option disabled: true
.
You can use an xpath query to check if there's an input
element with a particular value (e.g. 'John'):
expect(page).to have_xpath("//input[@value='John']")
See http://www.w3schools.com/xpath/xpath_syntax.asp for more info.
For perhaps a prettier way:
expect(find_field('Your name').value).to eq 'John'
EDIT: Nowadays I'd probably use have_selector
expect(page).to have_selector("input[value='John']")
If you are using the page object pattern(you should be!)
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"