Проблема возникла из-за того, что использование страницы Mechanize как документа Nokogiri (путем вызова метода /
, или search
, или xpath
и т. Д.) Возвращает элементы Nokogiri, а не элементы Mechanize с их специальными методами. 1004 *
Как отмечено в комментариях, вы можете быть уверены, что получите Mechanize::Form
, используя метод form_with
, чтобы найти вашу форму.
Иногда, однако, вы можете найти нужный вам элемент с помощью Нокогири, но не с помощью Механизации. Например, рассмотрим страницу с элементом <select>
, который не находится внутри <form>
. Поскольку формы нет, вы не можете использовать метод Mechanize field_with
, чтобы найти выбор и получить экземпляр Mechanize::Form::SelectList
.
Если у вас есть элемент Nokogiri и вы хотите получить эквивалент Mechanize, вы можете создать его, передав элемент Nokogiri конструктору. Например:
sel = Mechanize::Form::SelectList.new( page.at_xpath('//select[@name="city"]') )
В вашем случае, когда у вас было Nokogiri::XML::Element
и вы хотели Mechanize::Form
:
# Find the xml element
target_form = (page/:form).find{ |elem| elem['id'] == 'formid'}
target_form = Mechanize::Form.new( target_form )
P.S. Первая строка выше более просто достигается с помощью target_form = page.at_css('#formid')
.