最終更新: kitamomonga 2010年10月18日(月) 21:35:49履歴
HTML のフォームコントロールのうち、ラジオボタンひとつを表現するクラスです。
これはラジオボタンオブジェクト2つぶんです↓
<input type="radio" name="gender" id="radio-male" value="male" checked> <label for="radio-male">男性</label> <input type="radio" name="gender" id="radio-female" value="female"> <label for="radio-female">女性</label>
普通の Web ブラウザでの動作同様、「ON」の状態にできるラジオボタンは同名ラジオボタン内でひとつだけです。フォームから Mechanize::Form#radiobutton_with を通じてラジオボタンを選択し、#check メソッドで自分をチェックさせてください。
#value メソッドは HTML 上の value 属性値を、#text メソッドはそのラジオボタンに対応するラベル文字列を返します。
# value属性が "female" であるラジオボタンのみをチェック状態に form.radiobutton_with(:value => 'female').check # ラベルテキストに女性を含むラジオボタンのみをチェック(正規表現はUTF-8) form.radiobutton_with(:text => /女性/).checkMechanize::Form#radiobuttons_with で #name を検索すると、「ラジオボタンのグループ」を抽出することができます。
# genderと名づけられた"グループ"のうちの2つ目のラジオボタンをチェック form.radiobuttons_with(:name => 'gender')[1].check
排他処理対象になるラジオボタンオブジェクトは、このラジオボタンが所属するフォームの Mechanize::Form#radiobuttons の中から探されます。同じ name を持つ RadioButton はひとつしかチェックできません。チェックが行われるたびに同じ name のものが探され、チェックが外されています。
Mechanize::Form::Field を継承してはいるのですが、value= メソッドで「ONにしたことにする」ことはできません。
- new - Mechanize::Form::RadioButton オブジェクトを生成する
- check - このラジオボタンをチェックされた状態にして他の同名のラジオボタンを全て外す
- checked - このラジオボタンがチェック状態であるかを真偽で返す
- name - ラジオボタンの名前を文字列で返す
- node - このラジオボタンを表す HTML ノードを返す
- text - このラジオボタンに関連付けられたラベルの文字列を返す
- value - ラジオボタンの送信値を文字列で返す
- [] - このラジオボタンの属性値を返す
- checked= - このラジオボタンのチェック状態を真偽で指定
- click - このラジオボタンのチェック状態を反転する
- label - このラジオボタンに関連付けられたラベルオブジェクトを返す
- name= - ラジオボタンの名前を変更する
- node= - このラジオボタンを表す HTML ノードを再指定する
- query_value - 送信用のデータを配列で返す
- uncheck - このラジオボタンをチェックされていない状態にする
- value= - ラジオボタンの送信値を変更する
- <=> - 出現位置比較用の数値を返す
Mechanize::Form::RadioButton オブジェクトを生成します。ユーザーが使用することはありません。
#checked が元の値に関わらず true を返すように設定します。true を返します。
また、このラジオボタンを含むフォームの Mechanize::Form#radiobuttons から #name を持つ他の Radiobutton オブジェクトが探され、全て #uncheck されます。
つまり、通常の Web ブラウザの「マウスでラジオボタンをクリックしてチェック」する行為です。
このラジオボタンの名前を文字列で返します。
Mechanize::Form::Field#name を参照してください。
<input type="radio" name="gender" id="radio-male" value="male" checked>という HTML で表されるチェックボックスだった場合、name メソッドは文字列 "gender" を返します。
送信時に #query_value で使われ、サーバへ送られます。
このラジオボタンオブジェクトを作成したときに使用した HTML ノードを Nokogiri::HTML::Element? 等で返します。
Mechanize::Form::Field#node を参照してください。Nokogiri::HTML.parse(このinputタグ) のようなものです。
このラジオボタンに関連付けられたラベルの文字列を返します。
<input type="radio" name="gender" id="radio-male" value="male" checked> <label for="radio-male">男性</label>という HTML で表現されるラジオボタンだった場合、text メソッドは文字列 "男性" を返します。ラジオボタンに関連付けが無い場合は nil を返します。
#label メソッドの返り値で表される「label要素の内容文字列」を UTF-8 で返しています。ただの inner_text なので、HTML での改行や空白をそのまま含んでいます。radiobutton_with の条件などに使用するときは気をつけてください。
<form name="f"> <input type="radio" name="gender" id="radio-male" value="male" checked> <label for="radio-male"> 男性 </label>という HTML で表現されるラジオボタンだった場合、text メソッド使用時に合致するのは "男性" ではなく
agent.page.forms[0].radiobutton_with(:text => " \n 男性 \n".toutf8)となります。HTML 上での改行は一律 \n です。このへんはなんだかもう精密に書くのがひたすらめんどくさいので、誤爆が起こらない範囲で
agent.page.forms[0].radiobutton_with(:text => /男性/) #utf-8などとすることをお勧めします。
このラジオボタンの value 属性、またはユーザーが #value= で設定した文字列を返します。
Mechanize::Form::Field#value を参照してください。
<input type="radio" name="gender" id="radio-male" value="male" checked>という HTML で表されるチェックボックスだった場合、value メソッドは文字列 "male" を返します。
送信時に #query_value で使われ、サーバへ送られます。
key に対応する属性の値を文字列で返します。ユーザーが使用することはありません。
このラジオボタンに関連付けられたラベルを表す Mechanize::Page::Label? オブジェクトを返します。関連付けが無い場合は nil を返します。
ラベルは HTML の label 要素で表され、「label 要素の内容をクリックしてもラジオボタンをクリックしたことになるよ機能」として使われています。このラジオボタンの元の HTML に id 属性があり、その値と同じ for 属性を持つ label 要素が HTML 中のどこかにあれば、その label 要素を表すオブジェクトが返ります。#text メソッドでラベルの文字列を返すときに利用されています。ユーザーが使用することはありません。
HTML としては <LABEL><input type="radio">男性</LABEL> のように「ラジオボタンとテキストがlabelの要素になっている」場合もラベルとして機能しなければなりませんが、Mechanize 1.0.0 では対応していません。
Mechanize がサーバへ送信する文字列を作成する際に使用される、ネストした配列を返します。
Mechanize::Form::Field#query_value を参照してください。
# <input type="radio" name="gender" value="male"> form.radiobutton_with(:name => 'gender'){|radio| radio.check p radio.query_value #=> [['gender', 'male']] }このラジオボタンオブジェクトの #checked が真を返す場合に Mechanize::Form#build_query 内で呼ばれます。真であるようなラジオボタンがフォーム内にひとつもなかった場合は何も送りません(RFC 1866 の実装要求に(他のブラウザ同様)沿っていません)。
このラジオボタンの送信時に使用される値を返す #value メソッドの返り値を文字列 str に変更します。
このメソッドを使用してもラジオボタンのチェック状態を操作することはできません。#click メソッドを使用してください。
Mechanize::Form::Field#value= を参照してください。