libwww-perl / WWW-Mechanize

Handy web browsing in a Perl object
https://metacpan.org/pod/WWW::Mechanize
Other
68 stars 52 forks source link

submit_form should be able to handle multiple checkbox values #252

Open oalders opened 6 years ago

oalders commented 6 years ago

If submit_form gets an arrayref it should re-use the logic in tick of cycling through the form inputs by that name and checking possible_values. As it stands it will only try to set the value on the first checkbox in a group. If the value submitted does not match the possible values of the first checkbox you get a very confusing Illegal value for 'foo' for field 'bar' error message.

Yes, you can solve this via tick and untick, but you should also just be able to submit checkbox values directly via submit_form, as you can with other form fields.

As it stands, given the form:

<form>
  <input type="checkbox" name="foo" value="bar">
  <input type="checkbox" name="foo" value="qux">
  <submit>
</form>

You can submit via:

$mech->submit_form( with_fields => { foo => ['bar'] } ); # works
$mech->submit_form( with_fields => { foo => ['qux'] } ); # doesn't work
$mech->submit_form( with_fields => { foo => ['bar','qux'] } ); # doesn't work
$mech->submit_form( with_fields => { foo => [undef, 'qux'] } ); # doesn't work
$mech->submit_form( with_fields => { foo => ['bar', undef] } ); # works
petdance commented 6 years ago

Yes, please. This would be tremendous.

simbabque commented 5 years ago

While I'm here, I could give this a try too.

oalders commented 5 years ago

@simbabque please do!