Не удалось найти поле "Имя" (Capybara:: ElementNotFound) - программирование
Подтвердить что ты не робот

Не удалось найти поле "Имя" (Capybara:: ElementNotFound)

Я пытаюсь использовать capybara + rspec и получить эту ошибку: Не удалось найти поле "Имя" (Capybara:: ElementNotFound)

Вот моя форма:

%h2 Sign up
= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form-vertical' }) do |f|
  = f.error_notification
  = display_base_errors resource
  = f.input :name, :autofocus => true
  = f.button :submit, 'Sign up', :class => 'btn-primary'
= render "devise/shared/links"

Вот мой user_steps.rb

When /^I sign up with valid user data$/ do
  create_visitor
  sign_up
end

def create_visitor
  @visitor ||= { :name => "Test visitor"}
end

def sign_up
  visit '/users/sign_up'
  fill_in "Name", :with => @visitor[:name]
  click_button "Sign up"
end

Что не так????

4b9b3361

Ответ 1

Я столкнулся с этой проблемой и понял, что Capybara отфильтровал скрытые поля - мой элемент принадлежал неактивной вкладке (скрытой) в многостраничная страница. Я просто передал: видимый аргумент и установил его в false, и вуаля! элемент был найден.

fill_in "content", with: 'foo bar', visible: false

или

find('#item_content', visible: false).set 'foo bar'

Ответ 2

Мне кажется, что вы ищете метку поля Name, но в вашем поле имени нет метки, поэтому вам, вероятно, потребуется использовать идентификатор поля или имя, которое, вероятно, есть:

"#{resource_name}[name]"

Кроме того, как сказал @nmott в своем комментарии, вы должны попробовать использовать save_and_open_page, чтобы вы могли реально просмотреть страницу. Однако имейте в виду, что для использования этого метода нужен камень запуска.

Кроме того, вы можете обнаружить, что вы даже не на правильной странице. Моя обычная проблема при тестировании страниц, отличных от страницы регистрации, заключается в том, что я перенаправлен и не знал об этом. Поэтому, после использования visit, вы также должны использовать assert_template, чтобы убедиться, что находитесь на правильной странице.

Ответ 3

У меня такая же проблема, и мне пришлось перестать использовать fill_in все вместе. Я сделал замену всех вхождений fill_in на следующий код:

    element = page.find("Name")
    element.set(@visitor[:name])

Я думаю, вы можете инкапсулировать это в метод, чтобы сделать ваши тесты более плавными

Ответ 4

Попытайтесь сузить область видимости внутри формы как таковой

within("form#whatever_form_id") do
  fill_in "Name", :with => @visitor[:name]
  click_button "Sign up"
end

Ответ 5

Хорошо, ребята, я понял, что у меня такая же проблема, очень простая: В capybara или rspec они нуждаются в вас, но "Имя", а в поле формы или метки вам нужно написать "имя" в маленьком... там вы идете для меня.

Ответ 6

Для меня это была следующая строка спецификации, которая вызывала проблему не в строке fill_in "name". Не имело значения, было ли имя "Имя" или "Имя". Следующая строка click_button для меня имела click_button "Неверное имя", которое было неправильным именем для кнопки, и это не дало ожидаемой ошибки "не могу нажать кнопку" Неверное имя ", но вместо этого дано не может найти поле" имя". Немного подробный для моего первого сообщения даже после. Нижняя линия. Рассмотрим строку ниже строки, указанной в сообщении об ошибке capybara.