Как я могу проверить правильность заполнения поля формы с помощью capybara?
У меня есть поле с соответствующей меткой, которое я могу заполнить capybara без проблем:
fill_in 'Your name', with: 'John'
Я хочу проверить значение, которое оно имеет до заполнения и не может понять.
Если после fill_in
добавить следующую строку:
find_field('Your name').should have_content('John')
Этот тест не удался, хотя заполнение непосредственно перед тем, как он работал, как я проверял, сохраняя страницу.
Что мне не хватает?
Ответы
Ответ 1
Вы можете использовать запрос xpath для проверки наличия элемента input
с определенным значением (например, "Джон" ):
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'
EDIT: В настоящее время я бы, вероятно, использовал has_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
Другим хорошим решением было бы следующее:
page.should have_field('Your name', with: 'John')
или
expect(page).to have_field('Your name', with: 'John')
соответственно.
Также см. ссылку .
Примечание: для отключенных входов вам нужно добавить опцию disabled: true
.
Ответ 3
Если вы специально хотите проверить местозаполнитель, используйте:
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")
Ответ 4
Мне было интересно, как сделать что-то немного другое: я хотел проверить, имело ли поле какое-то значение (при использовании способность Capybara перепроверить совпадение до тех пор, пока оно не будет соответствовать). Оказывается, что для этого можно использовать "блок фильтров":
expect(page).to have_field("field_name") { |field|
field.value.present?
}