テキスト入力フィールド全般、あるいは hidden なコントロールひとつを表します。
一行入力欄、
<form name="field1">
<input type="text" name="oneliner" value="">
</form>
複数行の入力欄、
<form name="field1">
<textarea name="multi">テキスト1行目
2行目</textarea>
</form>
type="hidden" で表現される隠しコントロール、
<form name="field1">
<input type="hidden" name="subvalue" value="不可視1">
</form>
を、表現します。
Mechanize のページ中の
Mechanize::Form#fields に格納されており、
Mechanize::Form#field_with や
Mechanize::Form#fields_with で選択・抽出します。
#name で入力欄の name 属性の値を返します。
#value= を使用すると入力値を指定(上書き)することができます(通常の Web ブラウザでキーボード入力することに相当します)。
# name が oneliner な入力欄の value に 'Ruby' と指定する
# 送信データは oneliner=Ruby になるはず
agent.page.form_with(:name => 'f1'){|form|
form.field_with(:name => 'oneliner').value = 'Ruby'
}
value は必ず UTF-8 で指定してください。フォームのあるページの
Mechanize::Page#encoding の文字エンコーディングに変換されて送信されます。
なお、実用上「name で探して value= で指定」が余りにも頻繁なため、
Mechanize::Form#[]= を使用して
form.field_with(:name => 'oneliner').value = 'Ruby'
を
form['oneliner'] = 'Ruby'
と書くことが多いです。
実際は入力欄の種類によってこの Field クラスを継承した別の名称のクラスが使用されているのですが、現状名前が違うだけで個々のクラスとして動作が違うわけではないので、とりあえずここで解説します。
- <input type="text"> を扱う Mechanize::Form::Text
- <input type="textarea"> を扱う Mechanize::Form::Textarea
- <input type="hidden"> を扱う Mechanize::Form::Hidden
<textarea> は Textarea クラスではなくこの Field クラスです。type="text" でも type="textarea" でもないテキスト入力欄、type="password" なものとかもすべてこの Field クラスです。
また、このクラスはフォーム部品すべて(
Mechanize::Form::Optionを除く)の継承元クラスとしても使用されているので、いくつかのメソッドはそちらのクラスでも使用されていたりします。これは継承先のクラス説明で適当に説明したり誘導したりしてます。