Ruby の Mechanize の wiki のよてい

Mechanize::Form::Option


選択メニューのひとつの項目、option 要素を表現するクラスです。こんな状態です↓
<form name="select_test">
  <select name="select4" size="1">
    <option value="0" selected>ぽつーん</option> 
  </select>
</form>
ひとつの <option> に対し、ひとつの Option オブジェクトが対応します。
通常の選択メニューの場合は Mechanize::Form::SelectList#options に、複数選択可能なメニューだった場合は Mechanize::Form::MultiSelectList#options に、HTML にある項目の数だけ格納されています。
Mechanize::Form::SelectList#option_with で選択されます(MultiSelectList にはoption_with がありません)。
<form name="register_form">
  <select name="area" size="47">
    <option value="hokk">北海道</option>
    <option value="aomo">青森県</option>
    <option value="akit">秋田県</option>
     …
  </select>
</form>
という選択メニューだった場合、北海道を選択するにはたとえば #value を用いて
agent.page.form_woth(:name => 'register_form'){|f|
  f.field_with(:name => 'area').option_with(:value => 'hokk').select
}
としたり、または #text メソッドを使って
agent.page.form_woth(:name => 'register_form'){|f|
  f.field_with(:name => 'area').option_with(:text => '北海道').select
}
としたりします。

自分を選択状態にするには #select メソッドを使用します。
項目がひとつしか選択できない普通のメニューでは、最新の選択だけが有効になります。つまり、Mechanize::Form::SelectList に所属している Option オブジェクトだった場合、select するたびにメニュー内の全 Option の選択は解除され、常に最新のひとつが選択状態として扱われます。
複数選択可能な Mechanize::Form::MultiSelectList だった場合は select したものが全て保存されます。自分を非選択状態にするには #unselect メソッドを使ってください。


Mechanize::Form::Option.new(node, select_list)

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

value

元になった option 要素の value 属性の値を文字列で返します。
<option value="hokk">北海道</option>
という HTML で表される選択肢だった場合、この value メソッドは文字列 "hokk" を返します。
Mechanize::Util.html_unescape で文字参照などが解決されています。
HTML 上で value 属性が省略されていた場合は #text が代わりに使用されます。

selected

この項目が選択されている状態ならば true を、選択されていなければ false を返します。
HTML 上で selected 要素があった場合も最初から true になりますが、ユーザーに #select などで操作された結果と区別することはできません。
選択操作は #select#unselect で行います。

text

option 要素(囲まれた部分)を UTF-8 文字列で返します。
<option value="hokk">北海道</option>
という HTML で表される選択肢だった場合、この text メソッドは文字列 "北海道" を返します。通常の Web ブラウザではメニューの項目として表示される部分です。
Mechanize::Util.html_unescape で文字参照などが解決されています。

select_list

この Option オブジェクトを含む Mechanize::Form::SelectList オブジェクトか Mechanize::Form::MultiSelectList オブジェクトを返します。
Mechanize::Form::Option.new で指定されているものです。#select で「メニュー中の他の項目」を探すために使用します。

to_s

alias #value

selected?

alias #selected

select

#selected の返り値を、現在の値に関わらず true にするように設定します。true を返します。
いわゆる選択状態にする行為になります。通常の Web ブラウザで、非選択なメニュー項目をクリックして色つき背景に反転させた状態に該当します。
このオブジェクトが Mechanize::Form::SelectList に含まれていた場合は、他の項目を全て非選択状態にします。

tick

alias #select

unselect

#selected の返り値を、現在の値に関わらず false にするように設定します。false を返します。
いわゆる非選択状態にする行為です。通常の Web ブラウザで、選択済みなメニュー項目を白背景の非反転にする(またはそもそも触らない)状態に該当します。

untick

alias #unselect

click

#selected の真偽を逆転させます。逆転後の #selected の値を返します。
選択の状態を逆にするという点でマウスのクリック行為にとても似ているのですが、今現在の項目の選択状態が不明瞭なのでイマイチ使いでがありません。現在の項目の状態に関わらず結果が確定する #select(必ず選択)か #unselect(必ず非選択)の使用のほうをお勧めします。
このオブジェクトが Mechanize::Form::SelectList に含まれていて状態が true になった場合は、他の項目を全て非選択状態にします。

管理人/副管理人のみ編集できます