我正在尝试使用 Ruby 的 Mechanize gem 提交表单。此表单有一组名为“KeywordType”的单选按钮。各个按钮的名称类似于 rdoAny、rdoAll 和 rdoPhrase。使用 Perl 的 WWW:Mechanize,它可以正常工作:
my $result = $agent->submit_form(
form_number => 1,
fields => {
txtKeywords => 'foo bar baz',
lstLocationCode => '2100',
lstONETMajorGroup => '0',
KeywordType => 'rdoAny'
},
button => 'btnSearch'
);
但是当我这样做时 Ruby 犹豫不决:
result = page.form_with(:id => 'frmSearch') do |field|
field.txtKeywords = 'foo bar baz'
field.lstLocationCode = '2100'
field.lstONETMajorGroup = '0'
field.KeywordType = 'rdoAny'
end.submit
这会引发错误
"undefined method `KeywordType=' for #<Mechanize::Form:0x00000001c896e0> (NoMethodError)".
我试过省略 KeywordType 字段,但后来我被发送回同一页面,没有明显的错误消息。我也试过做 field.radiobuttons.second.check 和 field.radiobuttons_with(:name => "KeywordType") 之类的事情,但无济于事。
附带说明一下,发生了什么是因为 Ruby 看到大写的单选按钮名称并认为它是一个常量?
谢谢。
最佳答案
这行得通吗?
field['KeywordType'] = 'rdoAny'
编辑:哦,我想你在这里错过了一部分:
result = page.form_with(:id => 'frmSearch') do |field|
应该是(我认为):
result = page.form_with(:id => 'frmSearch').fields.each do |field|
关于Ruby 的 Mechanize 在选择单选按钮时会犹豫(可能是因为它的名称大写)但 Perl 的 WWW::Mechanize 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517468/