Ruby Mechanize wiki (ja) - Mechanize::Form::RadioButton

Mechanize::Form::RadioButton


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 => /女性/).check
Mechanize::Form#radiobuttons_with#name を検索すると、「ラジオボタンのグループ」を抽出することができます。
# genderと名づけられた"グループ"のうちの2つ目のラジオボタンをチェック
form.radiobuttons_with(:name => 'gender')[1].check

排他処理対象になるラジオボタンオブジェクトは、このラジオボタンが所属するフォームの Mechanize::Form#radiobuttons の中から探されます。同じ name を持つ RadioButton はひとつしかチェックできません。チェックが行われるたびに同じ name のものが探され、チェックが外されています。
Mechanize::Form::Field を継承してはいるのですが、value= メソッドで「ONにしたことにする」ことはできません。



Mechanize::Form::RadioButton オブジェクトを生成します。ユーザーが使用することはありません。

#checked が元の値に関わらず true を返すように設定します。true を返します。
また、このラジオボタンを含むフォームの Mechanize::Form#radiobuttons から #name を持つ他の Radiobutton オブジェクトが探され、全て #uncheck されます。
つまり、通常の Web ブラウザの「マウスでラジオボタンをクリックしてチェック」する行為です。

このラジオボタンが現在チェックされていれば true を、現在チェックされていなければ false を返します。
デフォルトは元の input 要素 での checked 属性の有無で、checked 属性が無かった場合は false を返します。
#check メソッドで返り値を true にすることができます。false に変更するには他のラジオボタンをチェックしてください(#uncheck することもできますが、通常のWebブラウザでは起こらない動作です)。なお、HTML 上での初期値と、ユーザーが変更メソッドを使用した結果とを区別することはできません。

このラジオボタンの名前を文字列で返します。
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 に対応する属性の値を文字列で返します。ユーザーが使用することはありません。

このラジオボタンのチェック状態を返す #checked の返り値を、true か false で設定します。
同名のラジオボタンを外す機能がないので、使用しないことをお勧めします。極力 #check を使用してください。

#checked の真偽を逆転させます。逆転後の #selected の値を返します。
このラジオボタンがチェックされている状態だった場合は #uncheck を、チェックされていない状態だった場合は #check を実行します。
現在の状態を把握してからでないとまず使用できず、チェック済みだった場合はチェックを外して「選択ボタンなし」の状態にしてしまうため、大変使い勝手の悪いメソッドです。通常の Web ブラウザでのラジオボタンのクリック動作とは違うので注意してください。通常の Web ブラウザのラジオボタンクリックは #check になります。

このラジオボタンに関連付けられたラベルを表す 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 では対応していません。

このラジオボタンの名前を返す #name メソッドの返り値を文字列 str に変更します。
Mechanize::Form::Field#name= を参照してください。

このラジオボタンの HTML ノードを返す #node メソッドの返り値を node_obj に変更します。
Mechanize::Form::Field#node= を参照してください。

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 の実装要求に(他のブラウザ同様)沿っていません)。

#checked が現在の値に関わらず false を返すように設定します。false を返します。
つまり、このラジオボタンのチェックを外すことだけを行います。通常の Web ブラウザではこれに該当する機能はなく、あまり使う機会のないメソッドだと思われます。#check にて「他の同名ラジオボタンを全部外す」時に使用されています。

このラジオボタンの送信時に使用される値を返す #value メソッドの返り値を文字列 str に変更します。
このメソッドを使用してもラジオボタンのチェック状態を操作することはできません。#click メソッドを使用してください。
Mechanize::Form::Field#value= を参照してください。

HTML 上での出現位置を引数のオブジェクトと比較し、sort 可能な答を返します。
Mechanize::Form::Field#<=> を参照してください。