Ruby の Mechanize の wiki のよてい

Mechanize::Form::Button


フォームに存在する一般的なボタン、送信ボタン <input type="button"> と汎用ボタン <button> を表現するクラスです。
送信ボタンクラス Mechanize::Form::Submit やイメージボタンクラス Mechanize::Form::ImageButton、およびリセットボタンクラス Mechanize::Form::Reset の継承元でもあります。

この Button オブジェクトは、「送信」によってその name と value がサーバに送られます。送信はこのボタンを含むフォームの Mechanize::Form#click_button で行います。現代的なフォームにあるボタンは送信用ボタン 1こなはずなので、引数なしの click_button を単純に使用するだけで用が済むことでしょう。
通常、この Button(と Submit、Reset)クラスそのもののオブジェクトやメソッドを意識する機会はありません。
  • 「フォーム1番目のボタンが21世紀もなって未だにリセットボタンで、ご丁寧にリセットボタンにnameとvalueがついてる」
  • 「送信に使えるボタンがなぜかフォーム内に複数あり、しかもセットされてるvalueがちょっとづつ違う」
  • 「明日不意にボタンが増えて click_button デフォルトで送信するデータが変わってしまったらと思うと夜も眠れない」

というような複雑な場合には、送信したいボタンを明示的に Mechanize::Form#click_button の引数に渡してください。
agent.page.form_with(:name => 'f1'){|f|
  f.click_button(f.button_with(:value => '送信'))
}

Button とその継承オブジェクトは Mechanize::Page::Form#buttons? にまとめて格納されており、Mechanize::Page#button_withMechanize::Page#buttons_with で選択・抽出できます。#name#value で区別可能です。name のないボタンも Mechanize で扱うことがありますが、そのときは name は nil になります。

見かけはボタンなのですが、アップロード欄の「参照...」ボタンは Mechanize::Form::FileUpload クラスで扱います。現在一般的なクライアントサイドクリックマップ(<area> を使う、多角形な領域のリンク)は「画像をクリックして動く」という点でイメージボタンに似てますが Mechanize::Page::Link クラスで扱います。ラジオボタンはボタンと名前がついていますが Mechanize::Form::RadioButton を参照してください。

Mechanize::Form::Field を継承しています。


Mechanize::Form::Button.new(node, value=node['value'])

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

name=(str)

このボタンの名前を返す #name メソッドの返り値を文字列 str に変更します。
Mechanize::Form::Field#name= を参照してください。
送信目的のボタンには名前が無いことが多いのですが、このメソッドで名前をつけると送信文字列にも反映されてしまいます。

name

このボタンの名前を文字列で返します。
Mechanize::Form::Field#name を参照してください。
このオブジェクトが Mechanize::Form#buttons に含まれているものの場合、name 属性がないボタンも存在しえます。その場合は nil を返します。

value=(str)

このボタンの値を返す #value メソッドの返り値を文字列 str に変更します。

value

このボタンの値を文字列で返します。
デフォルトは元の入力フォームの HTML の value 属性の文字列です。Mechanize::Util.html_unescape されています。
ボタンが Mechanize::Form#click_button の引数などに(自動で)指定されたとき、 #name と共に name=value という文字列が追加されてサーバへ送信されます。

node=(node_obj)

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

node

このボタンオブジェクトを作成したときに使用した HTML ノードオブジェクトを返します。
Mechanize::Form::Field#node を参照してください。

query_value

Mechanize がサーバへ送信する文字列を作成する際に使用される、ネストした配列を返します。
name=value という送信値になるような配列が作成されます。Mechanize::Form::Field#query_value を参照してください。
ただし、#name が nil だった場合、このメソッドは配列を返しはするのですが実際にはこのボタンに関するデータは取り除かれて送信されます。

<=>(other)

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

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