Как я могу проверить правильность заполнения поля формы с помощью 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?
}