Using Ruby and Mechanize to fill in a remote login form mystery

馋奶兔 提交于 2019-11-30 23:11:25

You don't need to pass form as an argument to submit. The button is also optional. Try using the following:

loggedin_page = login_page.form_with(:id => 'form1') do |form|
    username_field = form.field_with(:id => 'ContentPlaceHolder1_UserName')
    username_field.value = ARGV[0]
    password_field = form.field_with(:id => 'ContentPlaceHolder1_Password')
    password_field.value = ARGV[1]
end.submit

If you really do need to specify which button is used to submit the form, try this:

form = login_page.form_with(:id => 'form1')
username_field = form.field_with(:id => 'ContentPlaceHolder1_UserName')
username_field.value = ARGV[0]
password_field = form.field_with(:id => 'ContentPlaceHolder1_Password')
password_field.value = ARGV[1]

button = form.button_with(:id => 'ContentPlaceHolder1_btnlogin')
loggedin_page = form.submit(button)

It's a matter of scope:

page.form do |form|
  # this block has its own scope
  form['foo'] = 'bar' # <- ok, form is defined inside this block
end

puts form # <- error, form is not defined here

ramblex's suggestion is to not use a block with your form and I agree, it's less confusing that way.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!