Ruby の Mechanize の wiki のよてい

Mechanize::Form::ImageButton


画像が張られた送信ボタンこと、イメージボタンひとつを表すクラスです。↓こんなんです。

<form name="map_test">
<input type="image" name="imgbtn" src="/images/hatenawh.gif" alt="はてなロゴ">
</form>

Mechanize::Form::Button を継承しており、「押したときの x 座標と y 座標も一緒に送られるボタン」として振舞います。通常の Web ブラウザでは実際にクリックした座標も送っていますが、Mechanize では「クリックしたことにした」座標を変数として指定した上で送信します。#x= でマウスクリック時の x 座標を、#y= でマウスクリック時の y 座標を指定してください。
agent.page.form_with(:name => 'f1'){|f|
  f.button_with(:name => 'imgbtn'){|btn|
    btn.x, btn.y = 11, 12
    f.click_button(btn)
  }
}
メソッド省略時には画像の左上 (0, 0) をクリックしたとみなして送信されます(画面左上ではありません)。ただ、現状、イメージボタンを座標送信ボタンとして使用している例は稀で、単なる「画像の貼れるキレイなボタン」としてしか使われてない気もします。
現在一般的なクライアントサイドクリックマップ(<area> を使う、多角形な領域のリンク)は「画像をクリックして動く」という点でイメージボタンに似ていますが Mechanize::Page::Link クラスで扱います。

継承元の Mechanize::Form::Button および、Button の継承元の Mechanize::Form::Field のメソッドが動作します。

Mechanize 1.0.0 時点では、通常の Web ブラウザの動作とは違い、ボタンの name と value も送信されてしまいます。


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

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

name=(str)

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

name

このイメージボタンの名前を文字列で返します。
Mechanize::Form::Button#name を参照してください。

value=(str)

このイメージボタンの値を返す #value メソッドの返り値を文字列 str に変更します。
送信の際の座標は別途 #x=#y= で設定する必要があります。

value

このイメージボタンの値を文字列で返します。
送信時に #query_value で使用されます。Mechanize::Form::Button#value を参照してください。

node=(node_obj)

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

node

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

query_value

Mechanize がサーバへ送信する文字列を作成する際に使用される、ネストした配列を返します。
ingbtn=value&imgbtn.x=11&imgbtn.y=12 という送信値になるような配列が作成されます。#x#y が指定されていなかったときは数値部分は 0 とみなします。イメージボタンの画像の左上の角を意味する座標になります。
通常の Web ブラウザの送信値は name と value を含まない imgbtn.x=11&imgbtn.y=12 のようなものであることに注意をしてください。
#name が nil だった場合、最終的にはこのボタンに関するデータは取り除かれ、送信文字列には含まれません。Mechanize::Form::Field#query_value を参照してください。

<=>(other)

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

x=(integer)

サーバに送信する x 座標を設定します。
通常の Web ブラウザにおいて、イメージボタンをマウスでクリックした座標に相当します。イメージボタンに貼られた画像の左端が 0 で、右端に向けて画面ピクセル単位で増加します。
イメージマップとして使用されている場合には重要ですが、「単なる画像の張られた送信イメージボタン」としての用途の場合は比較的どうでもいいです。デフォルトは 0 ですが、マウスで押せる座標ではないので注意してください。

y=(integer)

サーバに送信する y 座標を設定します。
通常の Web ブラウザにおいて、イメージボタンをマウスでクリックした座標に相当します。イメージボタンに貼られた画像の上端が 0 で、下端に向けて画面ピクセル単位で増加します。
デフォルトは 0 です。

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